nx_modality_router_test.nx source
↩ module page · 175 lines · 10106 B
1// nx_modality_router_test.nx -- smoke for H10 multi-modal sharing.
2
3import "nx_syscalls.nx"
4import "nx_modality_router.nx"
5
6func main() -> i64 {
7 let backbone_weights: *i64 = (sys_mmap(256)) as *i64
8 let backbone_w2: *i64 = (sys_mmap(256)) as *i64
9 let head_data_a: *i64 = (sys_mmap(64)) as *i64
10 let head_data_b: *i64 = (sys_mmap(64)) as *i64
11 let head_data_c: *i64 = (sys_mmap(64)) as *i64
12 let head_data_d: *i64 = (sys_mmap(64)) as *i64
13
14 // ----- 1. Router construction -----
15 let r: *NxModalityRouter = nx_modality_router_new(4, 16)
16 if nx_modality_router_is_valid(r) != 1 { return 1 }
17 if nx_modality_n_backbones(r) != 0 { return 2 }
18 if nx_modality_n_heads(r) != 0 { return 3 }
19
20 // ----- 2. Register a backbone -----
21 let bb_slot: i64 = nx_modality_register_backbone(r, 7000, backbone_weights, 4096, 4096, 32)
22 if bb_slot != 0 { return 4 }
23 if nx_modality_n_backbones(r) != 1 { return 5 }
24
25 let b: *NxBackbone = nx_modality_lookup_backbone(r, 7000)
26 if nx_backbone_is_valid(b) != 1 { return 6 }
27 if nx_modality_backbone_id(b) != 7000 { return 7 }
28 if nx_modality_backbone_hidden_dim(b) != 4096 { return 8 }
29 if nx_modality_backbone_n_layers(b) != 32 { return 9 }
30 if nx_modality_backbone_refcount(r, 7000) != 0 { return 10 }
31
32 // ----- 3. Attach 3 modality heads to ONE backbone (the killer pattern) -----
33 let h0: i64 = nx_modality_register_head(r, 100, 7000, head_data_a, 4096, NX_MODALITY_TEXT)
34 if h0 != 0 { return 11 }
35 let h1: i64 = nx_modality_register_head(r, 101, 7000, head_data_b, 4096, NX_MODALITY_IMAGE)
36 if h1 != 1 { return 12 }
37 let h2: i64 = nx_modality_register_head(r, 102, 7000, head_data_c, 4096, NX_MODALITY_AUDIO)
38 if h2 != 2 { return 13 }
39 if nx_modality_n_heads(r) != 3 { return 14 }
40 if nx_modality_backbone_refcount(r, 7000) != 3 { return 15 }
41 if nx_modality_count_heads_for_backbone(r, 7000) != 3 { return 16 }
42
43 // ----- 4. Resolve modality -> backbone (one-call composition) -----
44 let bb_text: *NxBackbone = nx_modality_resolve_backbone(r, 100)
45 if nx_backbone_is_valid(bb_text) != 1 { return 17 }
46 if nx_modality_backbone_id(bb_text) != 7000 { return 18 }
47 // All three modalities resolve to the SAME backbone (sharing!)
48 let bb_img: *NxBackbone = nx_modality_resolve_backbone(r, 101)
49 let bb_aud: *NxBackbone = nx_modality_resolve_backbone(r, 102)
50 if (bb_img as i64) != (bb_text as i64) { return 19 }
51 if (bb_aud as i64) != (bb_text as i64) { return 20 }
52
53 // ----- 5. Head metadata exposed -----
54 let h_text: *NxModalityHead = nx_modality_lookup_head(r, 100)
55 if nx_modality_head_kind(h_text) != NX_MODALITY_TEXT { return 21 }
56 if nx_modality_head_backbone_id(h_text) != 7000 { return 22 }
57 let h_img: *NxModalityHead = nx_modality_lookup_head(r, 101)
58 if nx_modality_head_kind(h_img) != NX_MODALITY_IMAGE { return 23 }
59
60 // ----- 6. Evict refuses while in use -----
61 if nx_modality_evict_backbone(r, 7000) != (0 - NX_MOD_IN_USE) { return 24 }
62
63 // ----- 7. Add a SECOND backbone, attach one head -----
64 if nx_modality_register_backbone(r, 8000, backbone_w2, 2048, 2048, 24) != 1 { return 25 }
65 let h3: i64 = nx_modality_register_head(r, 200, 8000, head_data_d, 2048, NX_MODALITY_EMBED)
66 if h3 != 3 { return 26 }
67 if nx_modality_n_backbones(r) != 2 { return 27 }
68 if nx_modality_n_heads(r) != 4 { return 28 }
69 if nx_modality_backbone_refcount(r, 7000) != 3 { return 29 }
70 if nx_modality_backbone_refcount(r, 8000) != 1 { return 30 }
71 // Resolve cross-backbone
72 let bb_embed: *NxBackbone = nx_modality_resolve_backbone(r, 200)
73 if nx_modality_backbone_id(bb_embed) != 8000 { return 31 }
74
75 // ----- 8. Unregister releases backbone refcount -----
76 if nx_modality_unregister_head(r, 100) != NX_MOD_OK { return 32 }
77 if nx_modality_n_heads(r) != 3 { return 33 }
78 if nx_modality_backbone_refcount(r, 7000) != 2 { return 34 }
79 if (nx_modality_lookup_head(r, 100) as i64) != 0 { return 35 }
80 // Other heads on same backbone survive.
81 if (nx_modality_lookup_head(r, 101) as i64) == 0 { return 36 }
82 if (nx_modality_lookup_head(r, 102) as i64) == 0 { return 37 }
83
84 if nx_modality_unregister_head(r, 101) != NX_MOD_OK { return 38 }
85 if nx_modality_unregister_head(r, 102) != NX_MOD_OK { return 39 }
86 if nx_modality_backbone_refcount(r, 7000) != 0 { return 40 }
87 if nx_modality_count_heads_for_backbone(r, 7000) != 0 { return 41 }
88
89 // ----- 9. Evict succeeds once refcount==0 -----
90 if nx_modality_evict_backbone(r, 7000) != NX_MOD_OK { return 42 }
91 if nx_modality_n_backbones(r) != 1 { return 43 }
92 if (nx_modality_lookup_backbone(r, 7000) as i64) != 0 { return 44 }
93 // backbone 8000 survives
94 if (nx_modality_lookup_backbone(r, 8000) as i64) == 0 { return 45 }
95
96 // ----- 10. Duplicate IDs rejected -----
97 let r2: *NxModalityRouter = nx_modality_router_new(4, 8)
98 nx_modality_register_backbone(r2, 1, backbone_weights, 4096, 4096, 32)
99 if nx_modality_register_backbone(r2, 1, backbone_weights, 4096, 4096, 32) != (0 - NX_MOD_DUPLICATE) { return 46 }
100 nx_modality_register_head(r2, 50, 1, head_data_a, 4096, NX_MODALITY_TEXT)
101 if nx_modality_register_head(r2, 50, 1, head_data_a, 4096, NX_MODALITY_TEXT) != (0 - NX_MOD_DUPLICATE) { return 47 }
102
103 // ----- 11. BACKBONE_NOT_FOUND when head references missing backbone -----
104 if nx_modality_register_head(r2, 51, 9999, head_data_a, 4096, NX_MODALITY_TEXT) != (0 - NX_MOD_BACKBONE_NOT_FOUND) { return 48 }
105
106 // ----- 12. Bad inputs -----
107 let null_p: *i64 = (0 as i64) as *i64
108 if nx_modality_register_backbone(r2, 100, null_p, 4096, 4096, 32) != (0 - NX_MOD_BAD_INPUT) { return 49 }
109 if nx_modality_register_backbone(r2, 100, backbone_weights, 0, 4096, 32) != (0 - NX_MOD_BAD_INPUT) { return 50 }
110 if nx_modality_register_backbone(r2, 100, backbone_weights, 4096, 0, 32) != (0 - NX_MOD_BAD_INPUT) { return 51 }
111 if nx_modality_register_backbone(r2, 100, backbone_weights, 4096, 4096, 0) != (0 - NX_MOD_BAD_INPUT) { return 52 }
112 if nx_modality_register_head(r2, 60, 1, null_p, 4096, NX_MODALITY_TEXT) != (0 - NX_MOD_BAD_INPUT) { return 53 }
113 if nx_modality_register_head(r2, 60, 1, head_data_a, 0, NX_MODALITY_TEXT) != (0 - NX_MOD_BAD_INPUT) { return 54 }
114
115 // ----- 13. Bad kind -----
116 if nx_modality_register_head(r2, 60, 1, head_data_a, 4096, -1) != (0 - NX_MOD_BAD_KIND) { return 55 }
117 if nx_modality_register_head(r2, 60, 1, head_data_a, 4096, NX_MODALITY_N_KINDS) != (0 - NX_MOD_BAD_KIND) { return 56 }
118 if nx_modality_register_head(r2, 60, 1, head_data_a, 4096, 999) != (0 - NX_MOD_BAD_KIND) { return 57 }
119
120 // ----- 14. NOT_FOUND on missing modality -----
121 if nx_modality_unregister_head(r2, 9999) != (0 - NX_MOD_NOT_FOUND) { return 58 }
122 if nx_modality_evict_backbone(r2, 9999) != (0 - NX_MOD_NOT_FOUND) { return 59 }
123
124 // ----- 15. FULL -----
125 let r3: *NxModalityRouter = nx_modality_router_new(1, 1)
126 nx_modality_register_backbone(r3, 1, backbone_weights, 4096, 4096, 32)
127 if nx_modality_register_backbone(r3, 2, backbone_weights, 4096, 4096, 32) != (0 - NX_MOD_FULL) { return 60 }
128 nx_modality_register_head(r3, 1, 1, head_data_a, 4096, NX_MODALITY_TEXT)
129 if nx_modality_register_head(r3, 2, 1, head_data_a, 4096, NX_MODALITY_TEXT) != (0 - NX_MOD_FULL) { return 61 }
130
131 // ----- 16. Bad router_new -----
132 if (nx_modality_router_new(0, 4) as i64) != 0 { return 62 }
133 if (nx_modality_router_new(4, 0) as i64) != 0 { return 63 }
134 if (nx_modality_router_new(-1, 4) as i64) != 0 { return 64 }
135 if (nx_modality_router_new(NX_MODALITY_MAX_BACKBONES + 1, 4) as i64) != 0 { return 65 }
136 if (nx_modality_router_new(4, NX_MODALITY_MAX_HEADS + 1) as i64) != 0 { return 66 }
137
138 // ----- 17. Tamper detection -----
139 let tamper_r: *NxModalityRouter = nx_modality_router_new(4, 4)
140 tamper_r.canary_post = 0xDEADBEEF
141 if nx_modality_router_is_valid(tamper_r) != 0 { return 67 }
142 if nx_modality_register_backbone(tamper_r, 1, backbone_weights, 4096, 4096, 32) != (0 - NX_MOD_TAMPER) { return 68 }
143 if nx_modality_register_head(tamper_r, 1, 1, head_data_a, 4096, NX_MODALITY_TEXT) != (0 - NX_MOD_TAMPER) { return 69 }
144 if nx_modality_unregister_head(tamper_r, 1) != (0 - NX_MOD_TAMPER) { return 70 }
145 if nx_modality_evict_backbone(tamper_r, 1) != (0 - NX_MOD_TAMPER) { return 71 }
146 if nx_modality_n_backbones(tamper_r) != -1 { return 72 }
147 if (nx_modality_lookup_backbone(tamper_r, 1) as i64) != 0 { return 73 }
148 if (nx_modality_resolve_backbone(tamper_r, 1) as i64) != 0 { return 74 }
149
150 // ----- 18. Sealed-enum kind gates -----
151 if nx_modality_kind_is_valid(NX_MODALITY_TEXT) != 1 { return 75 }
152 if nx_modality_kind_is_valid(NX_MODALITY_IMAGE) != 1 { return 76 }
153 if nx_modality_kind_is_valid(NX_MODALITY_AUDIO) != 1 { return 77 }
154 if nx_modality_kind_is_valid(NX_MODALITY_EMBED) != 1 { return 78 }
155 if nx_modality_kind_is_valid(-1) != 0 { return 79 }
156 if nx_modality_kind_is_valid(NX_MODALITY_N_KINDS) != 0 { return 80 }
157
158 // ----- 19. Sealed-enum verdict gates -----
159 if nx_mod_verdict_is_valid(NX_MOD_OK) != 1 { return 81 }
160 if nx_mod_verdict_is_valid(NX_MOD_TAMPER) != 1 { return 82 }
161 if nx_mod_verdict_is_valid(-1) != 0 { return 83 }
162 if nx_mod_verdict_is_valid(NX_MOD_N_VERDICTS) != 0 { return 84 }
163
164 // ----- 20. Refcount == count-heads-for-backbone invariant -----
165 // This is the auditable invariant the substrate exports.
166 let rA: *NxModalityRouter = nx_modality_router_new(4, 8)
167 nx_modality_register_backbone(rA, 1, backbone_weights, 4096, 4096, 32)
168 nx_modality_register_head(rA, 10, 1, head_data_a, 4096, NX_MODALITY_TEXT)
169 nx_modality_register_head(rA, 11, 1, head_data_a, 4096, NX_MODALITY_IMAGE)
170 if nx_modality_backbone_refcount(rA, 1) != nx_modality_count_heads_for_backbone(rA, 1) { return 85 }
171 nx_modality_unregister_head(rA, 10)
172 if nx_modality_backbone_refcount(rA, 1) != nx_modality_count_heads_for_backbone(rA, 1) { return 86 }
173
174 return 0
175}