nx_intent_survival_test.nx source
↩ module page · 122 lines · 5479 B
1// nx_intent_survival_test.nx -- smoke for tiered survival verdict.
2
3import "nx_syscalls.nx"
4import "nx_tier.nx"
5import "nx_directors_note.nx"
6import "nx_intent_survival.nx"
7
8func main() -> nx_int {
9 // === Test 1: alloc returns all-UNMEASURED + DRIFT tier =========
10 let r: *SurvivalReport = nx_is_alloc(42, 7)
11 if r.arc_id != 42 { return 1 }
12 if r.moment_seq != 7 { return 2 }
13 if r.n_elems != NX_IS_N_ELEMS { return 3 }
14 if r.n_unmeasured != NX_IS_N_ELEMS { return 4 }
15 var i: nx_int = 0
16 while i < NX_IS_N_ELEMS {
17 if r.verdicts[i] != NX_IS_UNMEASURED { return 10 + i }
18 i = i + 1
19 }
20
21 // === Test 2: set + get round-trip ===============================
22 nx_is_set_verdict(r, NX_IS_ELEM_OUTFIT, NX_IS_SURVIVED)
23 if nx_is_get_verdict(r, NX_IS_ELEM_OUTFIT) != NX_IS_SURVIVED { return 20 }
24 nx_is_set_verdict(r, NX_IS_ELEM_POSE, NX_IS_PARTIAL)
25 if nx_is_get_verdict(r, NX_IS_ELEM_POSE) != NX_IS_PARTIAL { return 21 }
26
27 // Invalid elem -> -1; verdict unchanged
28 if nx_is_set_verdict(r, 99, NX_IS_SURVIVED) != 0 - 1 { return 22 }
29 if nx_is_set_verdict(r, NX_IS_ELEM_OUTFIT, 99) != 0 - 1 { return 23 }
30
31 // === Test 3: GOOD tier (all SURVIVED) ===========================
32 let g: *SurvivalReport = nx_is_alloc(1, 1)
33 var j: nx_int = 0
34 while j < NX_IS_N_ELEMS {
35 nx_is_set_verdict(g, j, NX_IS_SURVIVED)
36 j = j + 1
37 }
38 let tier_g: nx_int = nx_is_aggregate(g)
39 if tier_g != NX_PFT_GOOD { return 30 }
40 if g.n_survived != NX_IS_N_ELEMS { return 31 }
41 if g.n_missing != 0 { return 32 }
42 if g.n_partial != 0 { return 33 }
43 if g.n_unmeasured != 0 { return 34 }
44 if g.coverage_q10 != 1024 { return 35 } // 100% Q10
45
46 // === Test 4: DRIFT tier (one PARTIAL, no MISSING) ==============
47 let d: *SurvivalReport = nx_is_alloc(1, 2)
48 var k: nx_int = 0
49 while k < NX_IS_N_ELEMS {
50 nx_is_set_verdict(d, k, NX_IS_SURVIVED)
51 k = k + 1
52 }
53 nx_is_set_verdict(d, NX_IS_ELEM_BODY_ARCHETYPE, NX_IS_PARTIAL)
54 let tier_d: nx_int = nx_is_aggregate(d)
55 if tier_d != NX_PFT_DRIFT { return 40 }
56 if d.n_partial != 1 { return 41 }
57 if d.n_missing != 0 { return 42 }
58 // Coverage = 7/8 * 1024 = 896
59 if d.coverage_q10 != 896 { return 43 }
60
61 // === Test 5: BROKEN tier (one MISSING) =========================
62 let b: *SurvivalReport = nx_is_alloc(1, 3)
63 var m: nx_int = 0
64 while m < NX_IS_N_ELEMS {
65 nx_is_set_verdict(b, m, NX_IS_SURVIVED)
66 m = m + 1
67 }
68 nx_is_set_verdict(b, NX_IS_ELEM_OUTFIT, NX_IS_MISSING)
69 let tier_b: nx_int = nx_is_aggregate(b)
70 if tier_b != NX_PFT_BROKEN { return 50 }
71 if b.n_missing != 1 { return 51 }
72 // First missing -> OUTFIT -> NX_DN_UNDERSPEC_OUTFIT
73 if nx_is_first_missing_underspec(b) != NX_DN_UNDERSPEC_OUTFIT { return 52 }
74
75 // === Test 6: BROKEN beats DRIFT (any missing dominates) ========
76 let mx: *SurvivalReport = nx_is_alloc(1, 4)
77 nx_is_set_verdict(mx, NX_IS_ELEM_OUTFIT, NX_IS_SURVIVED)
78 nx_is_set_verdict(mx, NX_IS_ELEM_LOCATION, NX_IS_PARTIAL)
79 nx_is_set_verdict(mx, NX_IS_ELEM_POSE, NX_IS_SURVIVED)
80 nx_is_set_verdict(mx, NX_IS_ELEM_AFFECT, NX_IS_MISSING) // -> BROKEN
81 nx_is_set_verdict(mx, NX_IS_ELEM_PERSPECTIVE, NX_IS_SURVIVED)
82 nx_is_set_verdict(mx, NX_IS_ELEM_SHOT_SIZE, NX_IS_SURVIVED)
83 nx_is_set_verdict(mx, NX_IS_ELEM_CAMERA_MOTIVATION, NX_IS_SURVIVED)
84 nx_is_set_verdict(mx, NX_IS_ELEM_BODY_ARCHETYPE, NX_IS_SURVIVED)
85 if nx_is_aggregate(mx) != NX_PFT_BROKEN { return 60 }
86 // First missing here is AFFECT
87 if nx_is_first_missing_underspec(mx) != NX_DN_UNDERSPEC_AFFECT { return 61 }
88
89 // === Test 7: UNMEASURED routes to DRIFT (cautious ship) ========
90 let u: *SurvivalReport = nx_is_alloc(1, 5)
91 // Set 6 SURVIVED, leave 2 UNMEASURED
92 nx_is_set_verdict(u, NX_IS_ELEM_OUTFIT, NX_IS_SURVIVED)
93 nx_is_set_verdict(u, NX_IS_ELEM_LOCATION, NX_IS_SURVIVED)
94 nx_is_set_verdict(u, NX_IS_ELEM_POSE, NX_IS_SURVIVED)
95 nx_is_set_verdict(u, NX_IS_ELEM_AFFECT, NX_IS_SURVIVED)
96 nx_is_set_verdict(u, NX_IS_ELEM_PERSPECTIVE, NX_IS_SURVIVED)
97 nx_is_set_verdict(u, NX_IS_ELEM_SHOT_SIZE, NX_IS_SURVIVED)
98 // CAMERA_MOTIVATION + BODY_ARCHETYPE still UNMEASURED
99 if nx_is_aggregate(u) != NX_PFT_DRIFT { return 70 }
100 if u.n_unmeasured != 2 { return 71 }
101
102 // === Test 8: apply tier back onto DirectorsNote ===============
103 let dn: *DirectorsNote = nx_dn_alloc()
104 nx_is_apply_to_dn(b, dn) // b is BROKEN with OUTFIT missing
105 if dn.preflight_tier != NX_PFT_BROKEN { return 80 }
106 if dn.underspec_code != NX_DN_UNDERSPEC_OUTFIT { return 81 }
107
108 nx_is_apply_to_dn(g, dn) // g is GOOD
109 if dn.preflight_tier != NX_PFT_GOOD { return 82 }
110 if dn.underspec_code != NX_DN_UNDERSPEC_NONE { return 83 }
111
112 // === Test 9: sealed-enum validators ============================
113 if nx_is_verdict_is_valid(NX_IS_SURVIVED) != 1 { return 90 }
114 if nx_is_verdict_is_valid(NX_IS_MISSING) != 1 { return 91 }
115 if nx_is_verdict_is_valid(NX_IS_N_VERDICTS) != 0 { return 92 }
116 if nx_is_verdict_is_valid(99) != 0 { return 93 }
117 if nx_is_elem_is_valid(NX_IS_ELEM_OUTFIT) != 1 { return 94 }
118 if nx_is_elem_is_valid(NX_IS_ELEM_BODY_ARCHETYPE) != 1 { return 95 }
119 if nx_is_elem_is_valid(NX_IS_N_ELEMS) != 0 { return 96 }
120
121 return 0
122}