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}