code wiki / (root) / nx_classical_unpatented_2_test.nx

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}