nx_tool_census_test.nx source
↩ module page · 201 lines · 9906 B
1// nx_tool_census_test.nx -- KAT for bits-up tool census classifier.
2
3import "nx_syscalls.nx"
4import "nx_string_ops.nx"
5import "nx_grep.nx"
6import "nx_tool_census.nx"
7
8func main() -> i64 {
9 // ----- Allocate sample buffers -----
10 let cap: nx_int = 256
11 let content: *u8 = sys_mmap(cap)
12
13 // ----- T1 Sealed-enum completeness -----
14 var i: i64 = 0
15 while i < NX_TOOL_CENSUS_N {
16 if nx_tool_census_kind_is_valid(i) != 1 { return 1 + i }
17 i = i + 1
18 }
19 if nx_tool_census_kind_is_valid(0 - 1) != 0 { return 100 }
20 if nx_tool_census_kind_is_valid(NX_TOOL_CENSUS_N) != 0 { return 101 }
21
22 // ----- T2 Gate contribution mapping -----
23 if nx_tool_census_kind_counts_toward_gate(NX_TOOL_CENSUS_TEST) != 0 { return 110 }
24 if nx_tool_census_kind_counts_toward_gate(NX_TOOL_CENSUS_OFFC) != 0 { return 111 }
25 if nx_tool_census_kind_counts_toward_gate(NX_TOOL_CENSUS_AUTO_GENERATED) != 0 { return 112 }
26 if nx_tool_census_kind_counts_toward_gate(NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED) != 1 { return 113 }
27 if nx_tool_census_kind_counts_toward_gate(NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED) != 1 { return 114 }
28 if nx_tool_census_kind_counts_toward_gate(NX_TOOL_CENSUS_NONE) != 0 { return 115 }
29
30 // ----- T3 TEST filename suffix wins -----
31 // name = "nx_etg_test.nx" (14 bytes); content with autogen marker
32 // would still classify as TEST because suffix wins.
33 let name_test: *u8 = sys_mmap(32)
34 let bs_test: *u8 = "nx_etg_test.nx"
35 nx_str_slice_copy(bs_test, 0, 14, name_test, 32)
36 // Content with AUTO-GENERATED marker (would otherwise classify autogen).
37 let bs_autogen: *u8 = "// AUTO-GENERATED test stub"
38 nx_str_slice_copy(bs_autogen, 0, 27, content, cap)
39 let r3: i64 = nx_tool_census_classify(name_test, 14, content, 27)
40 if r3 != NX_TOOL_CENSUS_TEST { return 120 }
41
42 // ----- T4 OFFC filename prefix -----
43 let name_offc: *u8 = sys_mmap(32)
44 let bs_offc: *u8 = "_offc_probe.nx"
45 nx_str_slice_copy(bs_offc, 0, 14, name_offc, 32)
46 let bs_canon: *u8 = "// Canonical: substrate-wide canonical X"
47 nx_str_slice_copy(bs_canon, 0, 41, content, cap)
48 let r4: i64 = nx_tool_census_classify(name_offc, 14, content, 41)
49 if r4 != NX_TOOL_CENSUS_OFFC { return 130 }
50
51 // ----- T5 AUTO_GENERATED (no test suffix, no offc prefix) -----
52 let name_autogen: *u8 = sys_mmap(32)
53 let bs_addn: *u8 = "nx_add_42.nx"
54 nx_str_slice_copy(bs_addn, 0, 12, name_autogen, 32)
55 let bs_ag1: *u8 = "// AUTO-GENERATED from shape scalar_unary"
56 nx_str_slice_copy(bs_ag1, 0, 41, content, cap)
57 let r5: i64 = nx_tool_census_classify(name_autogen, 12, content, 41)
58 if r5 != NX_TOOL_CENSUS_AUTO_GENERATED { return 140 }
59 // Also try the lowercase + AUTOGEN variants
60 let bs_ag2: *u8 = "// auto-generated stub"
61 nx_str_slice_copy(bs_ag2, 0, 22, content, cap)
62 let r5b: i64 = nx_tool_census_classify(name_autogen, 12, content, 22)
63 if r5b != NX_TOOL_CENSUS_AUTO_GENERATED { return 141 }
64 let bs_ag3: *u8 = "// see AUTOGEN script"
65 nx_str_slice_copy(bs_ag3, 0, 21, content, cap)
66 let r5c: i64 = nx_tool_census_classify(name_autogen, 12, content, 21)
67 if r5c != NX_TOOL_CENSUS_AUTO_GENERATED { return 142 }
68
69 // ----- T6 HAND_WRITTEN_DECLARED (multiple lineage marker variants) -----
70 let name_hand: *u8 = sys_mmap(32)
71 let bs_hand: *u8 = "nx_etg.nx"
72 nx_str_slice_copy(bs_hand, 0, 9, name_hand, 32)
73 // "Composes:" marker
74 let bs_c1: *u8 = "// Composes: nx_fnv.nx"
75 nx_str_slice_copy(bs_c1, 0, 22, content, cap)
76 let r6a: i64 = nx_tool_census_classify(name_hand, 9, content, 22)
77 if r6a != NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED { return 150 }
78 // "Supersedes:" marker
79 let bs_c2: *u8 = "// Supersedes: older_X"
80 nx_str_slice_copy(bs_c2, 0, 22, content, cap)
81 let r6b: i64 = nx_tool_census_classify(name_hand, 9, content, 22)
82 if r6b != NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED { return 151 }
83 // "Canonical:" marker
84 let bs_c3: *u8 = "// Canonical: the substrate root"
85 nx_str_slice_copy(bs_c3, 0, 32, content, cap)
86 let r6c: i64 = nx_tool_census_classify(name_hand, 9, content, 32)
87 if r6c != NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED { return 152 }
88 // "genealogy_id:" marker
89 let bs_c4: *u8 = "// genealogy_id: hoare_1961_quicksort"
90 nx_str_slice_copy(bs_c4, 0, 37, content, cap)
91 let r6d: i64 = nx_tool_census_classify(name_hand, 9, content, 37)
92 if r6d != NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED { return 153 }
93 // "Distinct from X because Y" marker -- requires BOTH tokens
94 let bs_c5: *u8 = "// Distinct from nx_raster because it uses Z-buffer"
95 nx_str_slice_copy(bs_c5, 0, 51, content, cap)
96 let r6e: i64 = nx_tool_census_classify(name_hand, 9, content, 51)
97 if r6e != NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED { return 154 }
98
99 // ----- T7 HAND_WRITTEN_UNDECLARED (default) -----
100 let bs_plain: *u8 = "// nx_widget.nx -- some primitive without lineage"
101 nx_str_slice_copy(bs_plain, 0, 49, content, cap)
102 let r7: i64 = nx_tool_census_classify(name_hand, 9, content, 49)
103 if r7 != NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED { return 160 }
104
105 // ----- T8 Aggregator: init + accumulate + counts -----
106 let counts_buf: *u8 = sys_mmap(128)
107 let counts: *NxToolCensusCounts = counts_buf as *NxToolCensusCounts
108 nx_tool_census_counts_init(counts)
109 if counts.n_total != 0 { return 170 }
110 if counts.n_hand_written != 0 { return 171 }
111
112 // Feed 5 synthetic samples and verify aggregation.
113 nx_tool_census_accumulate(counts, NX_TOOL_CENSUS_TEST)
114 nx_tool_census_accumulate(counts, NX_TOOL_CENSUS_OFFC)
115 nx_tool_census_accumulate(counts, NX_TOOL_CENSUS_AUTO_GENERATED)
116 nx_tool_census_accumulate(counts, NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED)
117 nx_tool_census_accumulate(counts, NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED)
118
119 if counts.n_total != 5 { return 180 }
120 if counts.n_test != 1 { return 181 }
121 if counts.n_offc != 1 { return 182 }
122 if counts.n_auto_generated != 1 { return 183 }
123 if counts.n_hand_written != 2 { return 184 }
124 if counts.n_declared != 1 { return 185 }
125 if counts.n_undeclared != 1 { return 186 }
126
127 // ----- T9 pct_declared = 50 (1 of 2 hand-written) -----
128 if nx_tool_census_pct_declared(counts) != 50 { return 190 }
129
130 // ----- T10 pct_declared = 0 on zero hand_written (no div-by-zero) -----
131 let counts2_buf: *u8 = sys_mmap(128)
132 let counts2: *NxToolCensusCounts = counts2_buf as *NxToolCensusCounts
133 nx_tool_census_counts_init(counts2)
134 if nx_tool_census_pct_declared(counts2) != 0 { return 200 }
135
136 // ----- T11 accumulate rejects invalid kind -----
137 let rc_bad: i64 = nx_tool_census_accumulate(counts, 9999)
138 if rc_bad != -1 { return 210 }
139
140 // ----- T12 Ecosystem citizenship: outcome mapping -----
141 // counts from T8: 5 total, 1 declared, 1 undeclared (50% declared)
142 if nx_tool_census_to_etg_outcome(counts) != NX_ETG_OUTCOME_CONFIRMED { return 220 }
143
144 // Build a counts struct at 0% declared -> FALSIFIED
145 let cz_buf: *u8 = sys_mmap(128)
146 let cz: *NxToolCensusCounts = cz_buf as *NxToolCensusCounts
147 nx_tool_census_counts_init(cz)
148 nx_tool_census_accumulate(cz, NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED)
149 nx_tool_census_accumulate(cz, NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED)
150 nx_tool_census_accumulate(cz, NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED)
151 // 3 undeclared, 0 declared -> 0% -> FALSIFIED
152 if nx_tool_census_to_etg_outcome(cz) != NX_ETG_OUTCOME_FALSIFIED { return 221 }
153
154 // Build counts in INCONCLUSIVE band (1 of 4 declared = 25%)
155 let cmid_buf: *u8 = sys_mmap(128)
156 let cmid: *NxToolCensusCounts = cmid_buf as *NxToolCensusCounts
157 nx_tool_census_counts_init(cmid)
158 nx_tool_census_accumulate(cmid, NX_TOOL_CENSUS_HAND_WRITTEN_DECLARED)
159 nx_tool_census_accumulate(cmid, NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED)
160 nx_tool_census_accumulate(cmid, NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED)
161 nx_tool_census_accumulate(cmid, NX_TOOL_CENSUS_HAND_WRITTEN_UNDECLARED)
162 if nx_tool_census_to_etg_outcome(cmid) != NX_ETG_OUTCOME_INCONCLUSIVE { return 222 }
163
164 // Zero hand_written -> INCONCLUSIVE
165 let cnone_buf: *u8 = sys_mmap(128)
166 let cnone: *NxToolCensusCounts = cnone_buf as *NxToolCensusCounts
167 nx_tool_census_counts_init(cnone)
168 if nx_tool_census_to_etg_outcome(cnone) != NX_ETG_OUTCOME_INCONCLUSIVE { return 223 }
169
170 // ----- T13 nx_tool_census_attest emits valid NxEtgEntry -----
171 let e_buf: *u8 = sys_mmap(128)
172 let e: *NxEtgEntry = e_buf as *NxEtgEntry
173 // counts from T8: 5 total, 2 hand-written, 1 declared, 1 undeclared
174 let rc_attest: i64 = nx_tool_census_attest(counts, e, 0xC0DEC0DE, 1, 20260520)
175 if rc_attest != 0 { return 230 }
176 if e.silicon_serial_hash != 0xC0DEC0DE { return 231 }
177 if e.probe_kind != NX_ETG_PROBE_AUDIT_TOOL_GENEALOGY { return 232 }
178 if e.claim_source != NX_ETG_CLAIM_PRIOR_CALIBRATION { return 233 }
179 if e.claim_value != 2 { return 234 } // n_hand_written
180 if e.measurement_value != 1 { return 235 } // n_declared
181 if e.outcome != NX_ETG_OUTCOME_CONFIRMED { return 236 }
182 if e.attestation_hash == 0 { return 237 }
183
184 // ----- T14 Attestation determinism cross-call -----
185 let e2_buf: *u8 = sys_mmap(128)
186 let e2: *NxEtgEntry = e2_buf as *NxEtgEntry
187 nx_tool_census_attest(counts, e2, 0xC0DEC0DE, 1, 20260520)
188 if e2.attestation_hash != e.attestation_hash { return 240 }
189
190 // ----- T15 Flow signal: clear_goals -----
191 // counts at 50% -> 1
192 if nx_tool_census_signal_clear_goals(counts) != 1 { return 250 }
193 // cz at 0% -> 0
194 if nx_tool_census_signal_clear_goals(cz) != 0 { return 251 }
195 // cmid at 25% -> 0 (below 50% threshold)
196 if nx_tool_census_signal_clear_goals(cmid) != 0 { return 252 }
197 // cnone (no hand_written) -> 0
198 if nx_tool_census_signal_clear_goals(cnone) != 0 { return 253 }
199
200 return 0
201}