code wiki / _hdl_build / nx_viz_zoom_gate.nx

nx_viz_zoom_gate.nx source

↩ module page · 54 lines · 2326 B

1// nx_viz_zoom_gate.nx -- REFEREE for the zoom math (the d3-zoom transform invariants). 2// T1 identity (k=1000,t=0): apply(d)=d T2 zoom 2x about (100,100): k=2000, tx=-100 3// T3 cursor-fixed invariant: after zoom about cx, apply_x(cx)==cx T4 pan adds to translate 4// GREEN iff all. Sovereign: nx_viz_zoom + nx_syscalls. license_tier: ORIGINAL 5import "nx_viz_zoom.nx" 6import "nx_syscalls.nx" 7import "nx_gate_verdict.nx" 8 9func g_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 10func g_row(name: *u8, ok: i64) -> i64 { 11 if ok == 1 { g_w(" PASS " as *u8) } 12 if ok != 1 { g_w(" FAIL " as *u8) } 13 g_w(name); g_w("\n" as *u8) 14 return ok 15} 16 17func main() -> i64 { 18 g_w("viz-zoom gate (d3-zoom transform: scale + translate)\n" as *u8) 19 let st: *i64 = sys_mmap(64) as *i64 20 var pass: i64 = 0 21 22 st[0] = 1000; st[1] = 0; st[2] = 0 23 var t1: i64 = 0 24 if vz_apply_x(st, 50) == 50 { if vz_apply_y(st, 30) == 30 { t1 = 1 } } 25 pass = pass + g_row("T1 identity: apply(d)=d\x00" as *u8, t1) 26 27 st[0] = 1000; st[1] = 0; st[2] = 0 28 vz_zoom(st, 100, 100, 2000) 29 var t2: i64 = 0 30 if st[0] == 2000 { if st[1] == (0 - 100) { if st[2] == (0 - 100) { t2 = 1 } } } 31 pass = pass + g_row("T2 zoom 2x about (100,100): k=2000, t=-100\x00" as *u8, t2) 32 33 st[0] = 1000; st[1] = 0; st[2] = 0 34 vz_zoom(st, 200, 200, 1500) 35 var t3: i64 = 0 36 if vz_apply_x(st, 200) == 200 { if vz_apply_y(st, 200) == 200 { t3 = 1 } } 37 pass = pass + g_row("T3 cursor-fixed: apply(cx)=cx after zoom about cx\x00" as *u8, t3) 38 39 st[0] = 2000; st[1] = 50; st[2] = 60 40 vz_pan(st, 25, 0 - 10) 41 var t4: i64 = 0 42 if st[1] == 75 { if st[2] == 50 { t4 = 1 } } 43 pass = pass + g_row("T4 pan adds to translate\x00" as *u8, t4) 44 45 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 46 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 47 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 48 let ctr__dry: *i64 = gv_ctr() 49 ctr__dry[0] = pass 50 ctr__dry[1] = 4 51 let rc__dry: i64 = gv_verdict("VIZ-ZOOM-GATE" as *u8, ctr__dry, "4/4 (d3-zoom transform, cursor-fixed invariant)" as *u8) 52 sys_exit(rc__dry) 53 return rc__dry 54}