nx_antibody_test.nx source
↩ module page · 85 lines · 3245 B
1// nx_antibody_test.nx -- smoke for nx_antibody.
2
3import "nx_syscalls.nx"
4import "nx_pamp.nx"
5import "nx_antibody.nx"
6
7func main() -> i64 {
8 // 1: state enum sealed
9 if NX_AB_ST_N_STATES != 3 { return 1 }
10 if nx_ab_vd_state_is_valid(NX_AB_ST_NAIVE) != 1 { return 2 }
11 if nx_ab_vd_state_is_valid(NX_AB_ST_MEMORY) != 1 { return 3 }
12 if nx_ab_vd_state_is_valid(3) != 0 { return 4 }
13
14 // 2: construction
15 let arr: *NxAntibodyArray = nx_antibody_array_new(16)
16 if arr.capacity != 16 { return 5 }
17 if arr.count != 0 { return 6 }
18
19 // 3: generate first antibody from a pamp hit
20 let idx0: nx_int = nx_antibody_generate(arr,
21 NX_PAMP_TROJAN_SOURCE_HOMOGLYPH, 0x12345, 921, 1000)
22 if idx0 != 0 { return 7 }
23 if arr.count != 1 { return 8 }
24
25 let ab0: *NxAntibody = (arr.antibodies as i64 + 0 * 56) as *NxAntibody
26 if ab0.kind != NX_PAMP_TROJAN_SOURCE_HOMOGLYPH { return 9 }
27 if ab0.affinity_q10 != 921 { return 10 }
28 if ab0.state != NX_AB_ST_NAIVE { return 11 }
29 if ab0.hit_count != 0 { return 12 }
30
31 // 4: match misses on unknown signature
32 if nx_antibody_match(arr,
33 NX_PAMP_TROJAN_SOURCE_HOMOGLYPH, 0x99999) != -1 { return 13 }
34
35 // 5: match hits on known signature
36 let hit: nx_int = nx_antibody_match(arr,
37 NX_PAMP_TROJAN_SOURCE_HOMOGLYPH, 0x12345)
38 if hit != 0 { return 14 }
39
40 // 6: affinity maturation -- bumps hit_count + affinity (capped 1024)
41 nx_antibody_affinity_mature(arr, hit, 2000)
42 if ab0.hit_count != 1 { return 15 }
43 if ab0.affinity_q10 != 972 { return 16 } // 921 + 51
44
45 // 7: after 3 hits + affinity >= 614, state -> MATURE
46 nx_antibody_affinity_mature(arr, 0, 3000)
47 nx_antibody_affinity_mature(arr, 0, 4000)
48 if ab0.hit_count != 3 { return 17 }
49 if ab0.affinity_q10 != 1024 { return 18 } // capped
50 if ab0.state != NX_AB_ST_MATURE { return 19 }
51
52 // 8: after 10 hits + affinity >= 870, state -> MEMORY
53 var i: nx_int = 0
54 while i < 7 {
55 nx_antibody_affinity_mature(arr, 0, 5000 + i)
56 i = i + 1
57 }
58 if ab0.hit_count != 10 { return 20 }
59 if ab0.state != NX_AB_ST_MEMORY { return 21 }
60
61 // 9: federation-readiness predicate
62 if nx_antibody_is_federation_ready(ab0) != 1 { return 22 }
63
64 // Naive low-affinity antibody is NOT federation-ready
65 let idx1: nx_int = nx_antibody_generate(arr,
66 NX_PAMP_ENTROPY_ANOMALY, 0xaaa, 100, 6000)
67 let ab1: *NxAntibody = (arr.antibodies as i64 + (idx1 as i64) * 56) as *NxAntibody
68 if nx_antibody_is_federation_ready(ab1) != 0 { return 23 }
69
70 // 10: count by state
71 if nx_antibody_count_by_state(arr, NX_AB_ST_MEMORY) != 1 { return 24 }
72 if nx_antibody_count_by_state(arr, NX_AB_ST_NAIVE) != 1 { return 25 }
73 if nx_antibody_count_by_state(arr, NX_AB_ST_MATURE) != 0 { return 26 }
74
75 // 11: total hits across all antibodies
76 if nx_antibody_total_hits(arr) != 10 { return 27 } // ab0 only
77
78 // 12: full-array refuses new
79 let small: *NxAntibodyArray = nx_antibody_array_new(2)
80 nx_antibody_generate(small, NX_PAMP_NONE, 1, 100, 1000)
81 nx_antibody_generate(small, NX_PAMP_NONE, 2, 100, 1000)
82 if nx_antibody_generate(small, NX_PAMP_NONE, 3, 100, 1000) != -1 { return 28 }
83
84 return 0
85}