code wiki / _hdl_build / _resynth_validator.nx
_resynth_validator.nx source
↩ module page · 53 lines · 1746 B
1// RE-SYNTHESIZED BY THE NISHI TEAM (_type_search_authored): derived from KATs by
2// observational-equivalence search over a primitive pool. NOT retrieved -- the pool
3// holds no team function bodies. Silent main: exit 0 iff every KAT passes.
4import "nx_syscalls.nx"
5func _c_le(a: i64, b: i64) -> i64 { if a <= b { return 1 } return 0 }
6func _c_and(a: i64, b: i64) -> i64 { return a & b }
7func _c_shr(a: i64, b: i64) -> i64 { return a >> (b & 63) }
8func _c_min(a: i64, b: i64) -> i64 { if a < b { return a } return b }
9func _c_max(a: i64, b: i64) -> i64 { if a > b { return a } return b }
10func _c_add(a: i64, b: i64) -> i64 { return a + b }
11func _c_sub(a: i64, b: i64) -> i64 { return a - b }
12func _c_mul(a: i64, b: i64) -> i64 { return a * b }
13func _c_shl(a: i64, b: i64) -> i64 { return a << (b & 63) }
14func _c_div(a: i64, b: i64) -> i64 { if b == 0 { return 0 } return a / b }
15func _c_mod(a: i64, b: i64) -> i64 { if b == 0 { return 0 } return a % b }
16func _c_abs(a: i64) -> i64 { if a < 0 { return 0 - a } return a }
17func resynth(a: i64, b: i64) -> i64 { return _c_le(_c_le(a, 10), _c_mod(b, a)) }
18func main() -> i64 {
19 let ka: *i64 = sys_mmap(64) as *i64
20 let kb: *i64 = sys_mmap(64) as *i64
21 let kx: *i64 = sys_mmap(64) as *i64
22 ka[0] = 10
23 kb[0] = 99
24 kx[0] = 1
25 ka[1] = 9
26 kb[1] = 99
27 kx[1] = 0
28 ka[2] = 10
29 kb[2] = 100
30 kx[2] = 0
31 ka[3] = 20
32 kb[3] = 40
33 kx[3] = 1
34 ka[4] = 50
35 kb[4] = 42
36 kx[4] = 1
37 ka[5] = 100
38 kb[5] = 99
39 kx[5] = 1
40 ka[6] = 9
41 kb[6] = 0
42 kx[6] = 0
43 ka[7] = 10
44 kb[7] = 1000
45 kx[7] = 0
46 var i: i64 = 0
47 while i < 8 {
48 if resynth(ka[i], kb[i]) != kx[i] { sys_exit(1) }
49 i = i + 1
50 }
51 sys_exit(0)
52 return 0
53}