code wiki / (root) / nx_modality_router_test.nx

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}