code wiki / _hdl_build / nx_explodelab_wasm_vet.nx
nx_explodelab_wasm_vet.nx source
↩ module page · 98 lines · 4755 B
1// nx_explodelab_wasm_vet.nx -- VET THE SHIPPED EXPLODELAB BYTES: executes web_assets/nx_explodelab.wasm on
2// the sovereign nx_wasm_vm against the native twin, step for step. The surface is ALL-INTEGER (explode pose +
3// z-buffer raster), so it vets byte-for-byte: 240 scripted ticks (orbit drags + highlight clicks + E/D explode
4// holds + a mid-script RESET) -> the interaction STATE, the part KINEMATICS block, and a full rendered FRAME
5// must be IDENTICAL vm vs native. A divergence here is exactly what would ship as a broken page.
6// license_tier: ORIGINAL expect_exit: 0
7import "nx_syscalls.nx"
8import "nx_wasm_explodelab.nx"
9import "nx_wasm_vm.nx"
10const K_MAGIC_1824400: i64 = 1824400
11const K_MAGIC_4608: i64 = 4608
12const K_MAGIC_1687552: i64 = 1687552
13
14func vw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
15func vn(v: i64) -> i64 {
16 let b: *u8 = sys_mmap(32) as *u8
17 var x: i64 = v
18 var neg: i64 = 0
19 if x < 0 { neg = 1; x = 0 - x }
20 var i: i64 = 31
21 if x == 0 { b[i] = 48 as u8; i = i - 1 }
22 while x > 0 { b[i] = (48 + x % 10) as u8; x = x / 10; i = i - 1 }
23 if neg == 1 { b[i] = 45 as u8; i = i - 1 }
24 sys_write(1, (b as i64 + i + 1) as *u8, 31 - i)
25 return 0
26}
27
28func main() -> i64 {
29 var fails: i64 = 0
30 let lenp: *i64 = sys_mmap(16) as *i64
31 let wb: *u8 = sys_read_file("web_assets/nx_explodelab.wasm" as *u8, lenp)
32 if (wb as i64) == 0 { vw("VET RED: cannot read web_assets/nx_explodelab.wasm\n" as *u8); return 1 }
33 let mod: *WasmMod = wm_new(wb, lenp[0])
34 if wm_parse(mod) != 0 { vw("VET RED: wasm parse failed\n" as *u8); return 1 }
35 vw("V1 parse OK bytes=" as *u8); vn(lenp[0])
36 var missing: i64 = 0
37 if wm_find_export(mod, "start" as *u8) < 0 { missing = missing + 1 }
38 if wm_find_export(mod, "tick" as *u8) < 0 { missing = missing + 1 }
39 if wm_find_export(mod, "render" as *u8) < 0 { missing = missing + 1 }
40 if missing == 0 { vw(" exports OK\n" as *u8) } else { vw("\nV1 FAIL missing exports\n" as *u8); return 1 }
41
42 // native twin + identical scripted session on both
43 let nb: i64 = sys_mmap(mem_bytes()) as i64
44 start_at(nb)
45 wm_run(mod, "start" as *u8, 0, 0, 0, 0, 0, 0)
46 var t: i64 = 0
47 while t < 240 {
48 let mx: i64 = 30 + (t * 7) % 260
49 let my: i64 = 40 + (t * 3) % 160
50 var bt: i64 = 0
51 if (t % 50) < 10 { bt = 1 } // drag windows (orbit)
52 if (t % 71) == 30 { bt = 1 } // isolated presses (click-cycle)
53 if t >= 60 { if t < 70 { bt = 4 } } // E hold (explode)
54 if t >= 90 { if t < 100 { bt = 8 } } // D hold (assemble)
55 if t == 120 { bt = 2 } // mid-script RESET must also be identical
56 tick_at(nb, mx, my, bt)
57 wm_run(mod, "tick" as *u8, mx, my, bt, 0, 0, 3)
58 t = t + 1
59 }
60 // V2 interaction state identical
61 var diff: i64 = 0
62 var k: i64 = 0
63 while k < 16 {
64 let sv: i64 = wm_ld64(mod.mem, K_MAGIC_1824400 + k * 8)
65 let sn: *i64 = (nb + K_MAGIC_1824400) as *i64
66 if sv != sn[k] { diff = diff + 1 }
67 k = k + 1
68 }
69 if diff == 0 { vw("V2 PASS 240-tick scripted session (drags+clicks+E/D+RESET) -> interaction STATE identical vm vs native\n" as *u8) }
70 else { vw("V2 FAIL state diff-slots=" as *u8); vn(diff); vw("\n" as *u8); fails = fails + 1 }
71 // V3 part kinematics block identical (home/dir/depth/vstart/vcount)
72 diff = 0
73 k = 0
74 while k < K_MAGIC_4608 / 8 {
75 let kv: i64 = wm_ld64(mod.mem, K_MAGIC_1687552 + k * 8)
76 let kn: *i64 = (nb + K_MAGIC_1687552) as *i64
77 if kv != kn[k] { diff = diff + 1 }
78 k = k + 1
79 }
80 if diff == 0 { vw("V3 PASS part kinematics (home/dir/depth/ranges) IDENTICAL vm vs native\n" as *u8) }
81 else { vw("V3 FAIL kinematics diff-slots=" as *u8); vn(diff); vw("\n" as *u8); fails = fails + 1 }
82 // V4 full rendered frame identical
83 render_at(nb)
84 wm_run(mod, "render" as *u8, 0, 0, 0, 0, 0, 0)
85 diff = 0
86 var pi: i64 = 0
87 let nfb: *i64 = (nb + fb_off()) as *i64
88 while pi < ww() * hh() {
89 if wm_ld64(mod.mem, fb_off() + pi * 8) != nfb[pi] { diff = diff + 1 }
90 pi = pi + 1
91 }
92 if diff == 0 { vw("V4 PASS full rendered FRAME byte-identical (" as *u8); vn(ww() * hh()); vw(" px) -- the whole interactive surface vets (all-integer)\n" as *u8) }
93 else { vw("V4 FAIL frame diff px=" as *u8); vn(diff); vw("\n" as *u8); fails = fails + 1 }
94
95 if fails == 0 { vw("VET GREEN: the SHIPPED explodelab wasm executes IDENTICALLY to native -- interaction, kinematics, and pixels\n" as *u8); return 0 }
96 vw("VET RED fails=" as *u8); vn(fails); vw("\n" as *u8)
97 return fails
98}