code wiki / _hdl_build / nx_charlab_wasm_vet.nx

nx_charlab_wasm_vet.nx source

↩ module page · 94 lines · 4455 B

1// nx_charlab_wasm_vet.nx -- VET THE SHIPPED CHARLAB BYTES on nx_wasm_vm vs the native twin. Charlab is 2// ALL-INTEGER (skeleton/IK/regions/render), so the ENTIRE composed surface vets byte-for-byte: 240 scripted 3// ticks (mouse sweep + breathing toggle + a mid-script RESET) -> both region worlds AND the full rendered 4// frame IDENTICAL. license_tier: ORIGINAL expect_exit: 0 5import "nx_syscalls.nx" 6import "nx_wasm_charlab.nx" 7import "nx_wasm_vm.nx" 8const K_MAGIC_803200: i64 = 803200 9const K_MAGIC_810112: i64 = 810112 10const K_MAGIC_6848: i64 = 6848 11const K_MAGIC_614400: i64 = 614400 12 13func hw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 14func pn(v: i64) -> i64 { 15 let b: *u8 = sys_mmap(32) as *u8 16 var x: i64 = v 17 var neg: i64 = 0 18 if x < 0 { neg = 1; x = 0 - x } 19 var i: i64 = 31 20 if x == 0 { b[i] = 48 as u8; i = i - 1 } 21 while x > 0 { b[i] = (48 + x % 10) as u8; x = x / 10; i = i - 1 } 22 if neg == 1 { b[i] = 45 as u8; i = i - 1 } 23 sys_write(1, (b as i64 + i + 1) as *u8, 31 - i) 24 return 0 25} 26 27func main() -> i64 { 28 var fails: i64 = 0 29 let lenp: *i64 = sys_mmap(16) as *i64 30 let wb: *u8 = sys_read_file("web_assets/nx_charlab.wasm" as *u8, lenp) 31 if (wb as i64) == 0 { hw("VET RED: cannot read web_assets/nx_charlab.wasm\n" as *u8); return 1 } 32 let mod: *WasmMod = wm_new(wb, lenp[0]) 33 if wm_parse(mod) != 0 { hw("VET RED: wasm parse failed\n" as *u8); return 1 } 34 hw("V1 parse OK bytes=" as *u8); pn(lenp[0]) 35 var missing: i64 = 0 36 if wm_find_export(mod, "start" as *u8) < 0 { missing = missing + 1 } 37 if wm_find_export(mod, "tick" as *u8) < 0 { missing = missing + 1 } 38 if wm_find_export(mod, "render" as *u8) < 0 { missing = missing + 1 } 39 if missing == 0 { hw(" exports OK\n" as *u8) } else { hw("\nV1 FAIL missing exports\n" as *u8); return 1 } 40 41 let nb: i64 = sys_mmap(mem_bytes()) as i64 42 start_at(nb) 43 wm_run(mod, "start" as *u8, 0, 0, 0, 0, 0, 0) 44 var t: i64 = 0 45 while t < 240 { 46 var mx: i64 = 60 + (t * 3) % 200 47 var my: i64 = 40 + (t * 2) % 140 48 var bt: i64 = 0 49 if t == 60 { bt = 1 } // breathing toggle 50 if t == 140 { bt = 2 } // mid-script RESET 51 tick_at(nb, mx, my, bt) 52 wm_run(mod, "tick" as *u8, mx, my, bt, 0, 0, 3) 53 t = t + 1 54 } 55 // V2 both region worlds identical (⚠pointers LET-BOUND: the inline ((p+X) as *i64)[k] form MISCOMPILES 56 // -- the documented nx landmine; it made ALL slots read as diffs here while the frame was identical) 57 let rl: *i64 = (nb + K_MAGIC_803200) as *i64 58 let rr: *i64 = (nb + K_MAGIC_810112) as *i64 59 var diff: i64 = 0 60 var k: i64 = 0 61 while k < K_MAGIC_6848 / 8 { 62 if wm_ld64(mod.mem, K_MAGIC_803200 + k * 8) != rl[k] { diff = diff + 1 } 63 if wm_ld64(mod.mem, K_MAGIC_810112 + k * 8) != rr[k] { diff = diff + 1 } 64 k = k + 1 65 } 66 if diff == 0 { hw("V2 PASS 240-tick session (sweep+toggle+RESET) -> BOTH region worlds IDENTICAL vm vs native\n" as *u8) } 67 else { hw("V2 FAIL region diff-slots=" as *u8); pn(diff); hw("\n" as *u8); fails = fails + 1 } 68 // V3 skeleton bones identical (4 bones x 32 slots) -- let-bound pointer, same landmine 69 let skp: *i64 = (nb + K_MAGIC_614400) as *i64 70 diff = 0 71 k = 0 72 while k < (256 + 4 * 256) / 8 { 73 if wm_ld64(mod.mem, K_MAGIC_614400 + k * 8) != skp[k] { diff = diff + 1 } 74 k = k + 1 75 } 76 if diff == 0 { hw("V3 PASS skeleton (header+4 bones incl IK-solved angles) IDENTICAL\n" as *u8) } 77 else { hw("V3 FAIL skeleton diff-slots=" as *u8); pn(diff); hw("\n" as *u8); fails = fails + 1 } 78 // V4 full frame 79 render_at(nb) 80 wm_run(mod, "render" as *u8, 0, 0, 0, 0, 0, 0) 81 diff = 0 82 var pi: i64 = 0 83 let nfb: *i64 = (nb + fb_off()) as *i64 84 while pi < ww() * hh() { 85 if wm_ld64(mod.mem, fb_off() + pi * 8) != nfb[pi] { diff = diff + 1 } 86 pi = pi + 1 87 } 88 if diff == 0 { hw("V4 PASS full rendered FRAME byte-identical (" as *u8); pn(ww() * hh()); hw(" px)\n" as *u8) } 89 else { hw("V4 FAIL frame diff px=" as *u8); pn(diff); hw("\n" as *u8); fails = fails + 1 } 90 91 if fails == 0 { hw("VET GREEN: the SHIPPED charlab wasm executes IDENTICALLY to native -- skeleton, IK, flesh, and pixels\n" as *u8); return 0 } 92 hw("VET RED fails=" as *u8); pn(fails); hw("\n" as *u8) 93 return fails 94}