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}