nx_wasm_craft_morf_gate.nx source
↩ module page · 99 lines · 7012 B
1// ORIGINAL. Internal engine ownership gate, not browser/public-loader acceptance.
2import "nx_syscalls.nx"
3import "nx_gate_verdict.nx"
4import "nx_nxa.nx"
5import "nx_wasm_craft.nx"
6import "nx_morf_draw_core.nx"
7
8func main() -> i64 {
9 let ctr: *i64 = gv_ctr()
10 gv_head("engine-owned MORF storage and actual entity identity" as *u8)
11 let v: *MvcView = sys_mmap(__size_of(MvcView)) as *MvcView
12 let a: *MrdAsset = sys_mmap(__size_of(MrdAsset)) as *MrdAsset
13 let bind: *i64 = sys_mmap(9*MVC_WORD) as *i64
14 let bn: *i64 = sys_mmap(9*MVC_WORD) as *i64
15 let tri: *i64 = sys_mmap(3*MVC_WORD) as *i64
16 let face: *i64 = sys_mmap(MVC_WORD) as *i64
17 let delta: *i64 = sys_mmap(3*MVC_WORD) as *i64
18 let tags: *i64 = sys_mmap(2*MVC_WORD) as *i64
19 if (v as i64) <= 0 { return 1 }; if (a as i64) <= 0 { return 1 }
20 if (bind as i64) <= 0 { return 1 }; if (bn as i64) <= 0 { return 1 }
21 if (tri as i64) <= 0 { return 1 }; if (face as i64) <= 0 { return 1 }
22 if (delta as i64) <= 0 { return 1 }; if (tags as i64) <= 0 { return 1 }
23 var i: i64 = 0
24 while i < 9 { bind[i] = 0; bn[i] = 0; i = i+1 }
25 bind[3] = 100; bind[7] = 100
26 bn[2] = VN_SCALE; bn[5] = VN_SCALE; bn[8] = VN_SCALE
27 tri[0] = 0; tri[1] = 1; tri[2] = 2
28 face[0] = 2; delta[0] = 0; delta[1] = 0; delta[2] = 100
29 tags[0] = nxa_tag4("TEST" as *u8); tags[1] = 1
30 v.bind = bind; v.bind_words = 9; v.face = face; v.face_words = 1
31 v.delta = delta; v.delta_words = 3; v.vertices = 3; v.faces = 1; v.channels = 1; v.unit = 1000
32 a.morph = v; a.triangles = tri; a.triangle_words = 3; a.bind_normals = bn; a.normal_words = 9
33 let bytes: i64 = wc_morf_storage_bytes(a,2)
34 let independently_counted: i64 = __size_of(WcmBank)+__size_of(WcmDraw)+__size_of(MrdAsset)+__size_of(MvcView)+(9+3+1+2+3+9+WC_CAST_N+9+9)*MVC_WORD
35 gv_check_eq("derived storage equals independently enumerated layout" as *u8,bytes,independently_counted,ctr)
36 if bytes < 0 { return 1 }
37 gv_check_eq("append starts exactly at old extension tail" as *u8,O_WCM,CRAFT_EXT_TOTAL,ctr)
38 let base: i64 = sys_mmap(CRAFT_EXT_TOTAL+bytes+MVC_WORD) as i64
39 if base <= 0 { return 1 }
40 // Exercise the actual entity store, without unrelated terrain generation.
41 let mobs: *i64 = mobp(base)
42 en_init(mobs,MOB_CAP,MOB_NCOMP)
43 let first: i64 = en_spawn(mobs)
44 let second: i64 = en_spawn(mobs)
45 gv_check("actual first entity spawned" as *u8,first > 0,ctr)
46 gv_check("actual second entity spawned" as *u8,second > 0,ctr)
47 gv_check_eq("two actual mobs available" as *u8,en_count(mobs),2,ctr)
48 let guard: *i64 = (base+CRAFT_EXT_TOTAL+bytes) as *i64
49 guard[0] = 739
50 let bank: *WcmBank = wc_morf_bank(base)
51 let before: i64 = nxa_check2(1,base as *i64,CRAFT_EXT_TOTAL/MVC_WORD)
52 gv_check_eq("one byte undersized refuses" as *u8,wc_morf_bind(base,bytes-1,a,tags,2),WCM_RC_CAPACITY,ctr)
53 gv_check_eq("undersized bind has not loaded" as *u8,bank.loaded,0,ctr)
54 gv_check_eq("exact capacity admits" as *u8,wc_morf_bind(base,bytes,a,tags,2),0,ctr)
55 gv_check_eq("bank loaded after complete admission" as *u8,bank.loaded,1,ctr)
56 gv_check_eq("old arena full-range checksum preserved" as *u8,nxa_check2(1,base as *i64,CRAFT_EXT_TOTAL/MVC_WORD),before,ctr)
57 gv_check_eq("one-past-footprint guard preserved" as *u8,guard[0],739,ctr)
58 let d: *WcmDraw = wc_morf_descriptor(base)
59 let owned: *MrdAsset = d.asset
60 let ownv: *MvcView = owned.morph
61 gv_check("bind input copied into separate owned storage" as *u8,(ownv.bind as i64) != (bind as i64),ctr)
62 gv_check_eq("tag copied exactly" as *u8,wc_morf_channel_tag(base,0),tags[0],ctr)
63 gv_check_eq("self-source reload refuses alias" as *u8,wc_morf_bind(base,bytes,owned,bank.tags,2),WCM_RC_SOURCE,ctr)
64 gv_check_eq("alias preflight retains previous admitted bank" as *u8,bank.loaded,1,ctr)
65 // Destroy source values after bind: engine must evaluate its immutable copy.
66 bind[7] = 900; delta[2] = 900; face[0] = 0; tri[2] = 0; tags[0] = 0; bn[2] = 777
67 gv_check_eq("entity zero sets full asset-unit weight" as *u8,wc_cast_morf_weight(base,0,0,1000),0,ctr)
68 gv_check_eq("owned geometry moves one vertex despite source edits" as *u8,wc_cast_morf(base,0),1,ctr)
69 gv_check_eq("owned delta stays original" as *u8,d.positions[8],100,ctr)
70 gv_check_eq("owned bind stays original" as *u8,d.positions[7],100,ctr)
71 gv_check_eq("owned topology gives analytical normal" as *u8,d.normals[1],0-707,ctr)
72 gv_check_eq("owner can read active output" as *u8,wc_morf_positions_for(base,0),d.positions as i64,ctr)
73 gv_check_eq("different owner cannot read active output" as *u8,wc_morf_positions_for(base,1),WCM_RC_NOT_LOADED,ctr)
74 gv_check_eq("idempotent same weight" as *u8,wc_cast_morf_weight(base,0,0,1000),0,ctr)
75 gv_check_eq("same weight keeps active result valid" as *u8,d.ready,1,ctr)
76 gv_check_eq("other entity has zero independent weights" as *u8,wc_cast_morf(base,1),0,ctr)
77 gv_check_eq("inactive entity exposes no integer float replacement" as *u8,d.ready,0,ctr)
78 gv_check_eq("previous owner cannot read stale output" as *u8,wc_morf_normals_for(base,0),WCM_RC_NOT_LOADED,ctr)
79 gv_check_eq("actual missing mob refused despite spare weight capacity" as *u8,wc_cast_morf(base,2),NXA_RC_NO_MOB,ctr)
80 gv_check_eq("negative entity refused" as *u8,wc_cast_morf_weight(base,0-1,0,1000),NXA_RC_NO_MOB,ctr)
81 gv_check_eq("out-of-range channel refused" as *u8,wc_cast_morf_weight(base,0,1,1000),WCM_RC_WEIGHT_SHAPE,ctr)
82 gv_check_eq("active owner can prepare again" as *u8,wc_cast_morf(base,0),1,ctr)
83 gv_check_eq("changed weight accepted" as *u8,wc_cast_morf_weight(base,0,0,500),0,ctr)
84 gv_check_eq("changed weight invalidates active output" as *u8,d.ready,0,ctr)
85 // Reload the original fixture and prove all entity weights are reset.
86 bind[7] = 100; delta[2] = 100; face[0] = 2; tri[2] = 2
87 tags[0] = nxa_tag4("TEST" as *u8); bn[2] = VN_SCALE
88 gv_check_eq("second entity receives independent active weight" as *u8,wc_cast_morf_weight(base,1,0,1000),0,ctr)
89 gv_check_eq("asset reload succeeds" as *u8,wc_morf_bind(base,bytes,a,tags,2),0,ctr)
90 var all_zero: i64 = 1; i = 0
91 while i < d.weight_words { if d.weights[i] != 0 { all_zero = 0 }; i = i+1 }
92 gv_check("reload clears every entity weight row" as *u8,all_zero,ctr)
93 gv_check_eq("reload clears prepared output" as *u8,d.ready,0,ctr)
94 gv_check_eq("reloaded inactive first entity preserves float path" as *u8,wc_cast_morf(base,0),0,ctr)
95 gv_check_eq("reloaded inactive second entity preserves float path" as *u8,wc_cast_morf(base,1),0,ctr)
96 gv_check_eq("old arena full-range checksum preserved after lifecycle" as *u8,nxa_check2(1,base as *i64,CRAFT_EXT_TOTAL/MVC_WORD),before,ctr)
97 gv_check_eq("tail guard survives reload" as *u8,guard[0],739,ctr)
98 return gv_verdict("NX-WASM-CRAFT-MORF" as *u8,ctr,"internal owned storage lifecycle; public loader and renderer delivery remain open" as *u8)
99}