code wiki / (root) / nx_hamming_test.nx

nx_hamming_test.nx source

↩ module page · 50 lines · 1501 B

1// nx_hamming_test.nx -- smoke for Hamming distance. 2 3import "nx_syscalls.nx" 4import "nx_tier.nx" 5import "nx_hamming.nx" 6 7func main() -> nx_int { 8 // === Test 1: identical -> 0 === 9 let a1: *u8 = sys_mmap(8) 10 a1[0] = 1 11 a1[1] = 2 12 a1[2] = 3 13 a1[3] = 4 14 let b1: *u8 = sys_mmap(8) 15 b1[0] = 1 16 b1[1] = 2 17 b1[2] = 3 18 b1[3] = 4 19 if nx_hamming(a1, b1, 4) != 0 { return 1 } 20 if nx_hamming_similarity_q10(a1, b1, 4) != NX_HAMMING_Q { return 2 } 21 22 // === Test 2: one byte different -> 1 === 23 b1[2] = 99 24 if nx_hamming(a1, b1, 4) != 1 { return 10 } 25 // similarity_q10 = Q - (1*Q/4) = Q - 256 = 768 26 if nx_hamming_similarity_q10(a1, b1, 4) != 768 { return 11 } 27 if nx_hamming_classify(768) != NX_STRSIM_NEAR_DUPLICATE { return 12 } 28 29 // === Test 3: all different -> n === 30 let a3: *u8 = sys_mmap(8) 31 let b3: *u8 = sys_mmap(8) 32 var i: nx_int = 0 33 while i < 4 { 34 a3[i] = 1 35 b3[i] = 2 36 i = i + 1 37 } 38 if nx_hamming(a3, b3, 4) != 4 { return 20 } 39 if nx_hamming_similarity_q10(a3, b3, 4) != 0 { return 21 } 40 41 // === Test 4: length mismatch sentinel === 42 if nx_hamming_safe(a1, 4, b1, 3) != NX_HAMMING_LENGTH_MISMATCH { return 30 } 43 if nx_hamming_safe(a1, 4, b1, 4) < 0 { return 31 } 44 45 // === Test 5: empty input === 46 if nx_hamming(a1, b1, 0) != 0 { return 40 } 47 if nx_hamming_similarity_q10(a1, b1, 0) != NX_HAMMING_Q { return 41 } 48 49 return 0 50}