nx_classical_unpatented_2_test.nx source
↩ module page · 92 lines · 3437 B
1// nx_classical_unpatented_2_test.nx -- umbrella smoke for batch 2.
2
3import "nx_syscalls.nx"
4import "nx_tier.nx"
5import "nx_classical_unpatented_2.nx"
6
7func main() -> nx_exit {
8 // ----- 110s: clz_64 -----
9 if nx_clz_64(0) != 64 { return 111 }
10 if nx_clz_64(1) != 63 { return 112 }
11 if nx_clz_64(2) != 62 { return 113 }
12 if nx_clz_64(0x8000000000000000) != 0 { return 114 }
13 if nx_clz_64(0xFF) != 56 { return 115 }
14
15 // ----- 120s: ctz_64 -----
16 if nx_ctz_64(0) != 64 { return 121 }
17 if nx_ctz_64(1) != 0 { return 122 }
18 if nx_ctz_64(2) != 1 { return 123 }
19 if nx_ctz_64(8) != 3 { return 124 }
20 if nx_ctz_64(0x100000000) != 32 { return 125 }
21
22 // ----- 130s: reverse_bits_64 -----
23 // bit 0 set -> bit 63 set
24 if nx_reverse_bits_64(1) != 0x8000000000000000 { return 131 }
25 // palindrome 0xFFFFFFFFFFFFFFFF stays itself
26 if nx_reverse_bits_64(0x7FFFFFFFFFFFFFFF) != 0xFFFFFFFFFFFFFFFE { return 132 }
27 // zero stays zero
28 if nx_reverse_bits_64(0) != 0 { return 133 }
29
30 // ----- 140s: Horner -----
31 let buf_c: *u8 = sys_mmap(80)
32 let coeffs: *nx_int = buf_c as *nx_int
33 // p(x) = 1 + 2x + 3x^2; p(2) = 1 + 4 + 12 = 17
34 coeffs[0] = 1; coeffs[1] = 2; coeffs[2] = 3
35 if nx_horner_eval(coeffs, 3, 2) != 17 { return 141 }
36 // p(0) = 1
37 if nx_horner_eval(coeffs, 3, 0) != 1 { return 142 }
38 // p(1) = 6
39 if nx_horner_eval(coeffs, 3, 1) != 6 { return 143 }
40 // n = 0 returns 0
41 if nx_horner_eval(coeffs, 0, 5) != 0 { return 144 }
42
43 // ----- 150s: Welford M2 -----
44 let buf_w: *u8 = sys_mmap(80)
45 let aw: *nx_int = buf_w as *nx_int
46 // [2, 4, 4, 4, 5, 5, 7, 9] -- classical Welford example.
47 // mean = 5, deviations squared = 9+1+1+1+0+0+4+16 = 32, M2 = 32.
48 aw[0] = 2; aw[1] = 4; aw[2] = 4; aw[3] = 4
49 aw[4] = 5; aw[5] = 5; aw[6] = 7; aw[7] = 9
50 if nx_welford_m2(aw, 8) != 32 { return 151 }
51 // single element: m2 = 0
52 if nx_welford_m2(aw, 1) != 0 { return 152 }
53 // empty: m2 = 0
54 if nx_welford_m2(aw, 0) != 0 { return 153 }
55
56 // ----- 160s: extended_gcd -----
57 let buf_x: *u8 = sys_mmap(16)
58 let buf_y: *u8 = sys_mmap(16)
59 let bx: *nx_int = buf_x as *nx_int
60 let by: *nx_int = buf_y as *nx_int
61 // gcd(240, 46) = 2, and 240*(-9) + 46*47 = -2160 + 2162 = 2.
62 let g1: nx_int = nx_extended_gcd(240, 46, bx, by)
63 if g1 != 2 { return 161 }
64 if (240 * bx[0] + 46 * by[0]) != 2 { return 162 }
65 // gcd(35, 15) = 5
66 let g2: nx_int = nx_extended_gcd(35, 15, bx, by)
67 if g2 != 5 { return 163 }
68 if (35 * bx[0] + 15 * by[0]) != 5 { return 164 }
69
70 // ----- 170s: mod_pow -----
71 // 2^10 mod 1000 = 1024 mod 1000 = 24
72 if nx_mod_pow(2, 10, 1000) != 24 { return 171 }
73 // 3^5 mod 7 = 243 mod 7 = 5
74 if nx_mod_pow(3, 5, 7) != 5 { return 172 }
75 // anything mod 1 = 0
76 if nx_mod_pow(99, 99, 1) != 0 { return 173 }
77 // base^0 = 1
78 if nx_mod_pow(5, 0, 13) != 1 { return 174 }
79
80 // ----- 180s: is_prime_trial -----
81 if nx_is_prime_trial(0) != 0 { return 181 }
82 if nx_is_prime_trial(1) != 0 { return 182 }
83 if nx_is_prime_trial(2) != 1 { return 183 }
84 if nx_is_prime_trial(3) != 1 { return 184 }
85 if nx_is_prime_trial(4) != 0 { return 185 }
86 if nx_is_prime_trial(17) != 1 { return 186 }
87 if nx_is_prime_trial(100) != 0 { return 187 }
88 if nx_is_prime_trial(997) != 1 { return 188 }
89 if nx_is_prime_trial(999) != 0 { return 189 }
90
91 return 0
92}