code wiki / _hdl_build / nx_inline_vec_measure_gate.nx
nx_inline_vec_measure_gate.nx source
↩ module page · 102 lines · 5258 B
1// nx_inline_vec_measure_gate.nx -- PROOF (re-runnable) of the S21 F3 root fix: when the renderer paints
2// with the proportional VECTOR font, layout must reserve the SAME widths (font_adv_em sums), not the wider
3// bitmap widths -- the drift put visible gaps around every styled inline span/link (Wikipedia links, the
4// /experiential intro labels). T1/T2 prove exactness in both modes; T3 proves inline CONTIGUITY (the next
5// run starts where the previous ended -- the gap is structurally gone); T4 is the can-fail control (vec
6// widths genuinely differ from bitmap for this text, so T1 isn't vacuous). license_tier: ORIGINAL
7// expect_exit: 0
8import "nx_syscalls.nx"
9import "nx_browser_render.nx"
10
11func gv_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
12func gv_n(v: i64) -> i64 { let t: *u8=sys_mmap(24); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} let b: *u8=sys_mmap(24); var j: i64=0; while j<k{b[j]=t[k-1-j];j=j+1} sys_write(1,b,k); return 0 }
13func gv_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
14
15func gv_box(t: *LayoutTree, i: i64) -> *LayoutBox {
16 return (t.boxes as *u8 + (i as nx_size) * (NX_LAYOUT_BOX_BYTES as nx_size)) as *LayoutBox
17}
18func gv_has(src: *u8, off: i64, len: i64, m: *u8) -> i64 {
19 let ml: i64 = gv_slen(m)
20 if ml == 0 { return 0 }
21 var i: i64 = 0
22 while i + ml <= len {
23 var k: i64 = 0
24 var ok: i64 = 1
25 while k < ml { if (src[off+i+k]&0xff) != (m[k]&0xff) { ok = 0; k = ml } else { k = k + 1 } }
26 if ok == 1 { return 1 }
27 i = i + 1
28 }
29 return 0
30}
31// layout the fixture; find the text box containing `marker`; return ptr (0 if absent)
32func gv_find(page: *Page, marker: *u8) -> *LayoutBox {
33 let t: *LayoutTree = page.tree
34 var i: i64 = 0
35 while i < t.count {
36 let b: *LayoutBox = gv_box(t, i)
37 if b.text_len > 0 { if gv_has(page.buf, b.text_off, b.text_len, marker) == 1 { return b } }
38 i = i + 1
39 }
40 return 0 as *LayoutBox
41}
42func gv_layout(html: *u8, vec: i64) -> *Page {
43 let page: *Page = sys_mmap(NX_PAGE_BYTES) as *Page
44 page.raw = html
45 page.raw_len = gv_slen(html)
46 page.dark_mode = 0
47 nx_layout_set_vec_measure(vec)
48 br_layout(page, 1024)
49 return page
50}
51
52func main() -> i64 {
53 gv_w("=== nx_inline_vec_measure_gate -- layout reserves what the vector paint draws (S21 F3) ===\n" as *u8)
54 var fails: i64 = 0
55 // one line, three runs: "alpha " <b>beta</b> " gamma" -- the <b> span is the styled inline
56 let html: *u8 = "<html><body><p>alpha <b>beta</b> gamma</p></body></html>\x00" as *u8
57
58 // T1: vec mode -- the "beta" box width == the exact font_adv_em sum at the inherited fs (16)
59 let pv: *Page = gv_layout(html, 1)
60 let bv: *LayoutBox = gv_find(pv, "beta\x00" as *u8)
61 var want: i64 = 0
62 let bs: *u8 = "beta\x00" as *u8
63 var i: i64 = 0
64 while bs[i] != (0 as u8) { want = want + (font_adv_em((bs[i] as i64) & 255) * 16) / 1000; i = i + 1 }
65 gv_w(" T1 vec-measure beta w=" as *u8)
66 if (bv as i64) != 0 { gv_n(bv.w) } else { gv_w("(missing)" as *u8) }
67 gv_w(" want=" as *u8); gv_n(want)
68 var t1: i64 = 0
69 if (bv as i64) != 0 { if bv.w == want { t1 = 1 } }
70 if t1 == 1 { gv_w(" PASS (exact vector sum)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL\n" as *u8) }
71
72 // T2: bitmap mode (default OFF) -- width == font8x8 measured width x scale (byte-unchanged legacy)
73 let pb: *Page = gv_layout(html, 0)
74 let bb: *LayoutBox = gv_find(pb, "beta\x00" as *u8)
75 let ftab: *u8 = font8x8_table()
76 let wantb: i64 = font8x8_text_w(ftab, bs, 0, 4) * 1
77 gv_w(" T2 bitmap-measure beta w=" as *u8)
78 if (bb as i64) != 0 { gv_n(bb.w) } else { gv_w("(missing)" as *u8) }
79 gv_w(" want=" as *u8); gv_n(wantb)
80 var t2: i64 = 0
81 if (bb as i64) != 0 { if bb.w == wantb { t2 = 1 } }
82 if t2 == 1 { gv_w(" PASS (legacy bitmap unchanged when OFF)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL\n" as *u8) }
83
84 // T3: CONTIGUITY in vec mode -- " gamma" starts exactly at beta.x + beta.w (no phantom gap)
85 let gv2: *LayoutBox = gv_find(pv, "gamma\x00" as *u8)
86 gv_w(" T3 contiguity: beta.x+w=" as *u8)
87 var t3: i64 = 0
88 if (bv as i64) != 0 { if (gv2 as i64) != 0 {
89 gv_n(bv.x + bv.w); gv_w(" gamma.x=" as *u8); gv_n(gv2.x)
90 if gv2.x == bv.x + bv.w { t3 = 1 }
91 } }
92 if t3 == 1 { gv_w(" PASS (next run starts where the last ended -- gap structurally dead)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL\n" as *u8) }
93
94 // T4 CAN-FAIL control: vec and bitmap widths genuinely DIFFER for this run (else T1 proves nothing)
95 gv_w(" T4 modes differ: vec=" as *u8); gv_n(want); gv_w(" bitmap=" as *u8); gv_n(wantb)
96 if want != wantb { gv_w(" PASS (the fix is load-bearing)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL (vacuous)\n" as *u8) }
97
98 nx_layout_set_vec_measure(0)
99 if fails == 0 { gv_w("NX-INLINE-VEC-MEASURE GREEN -- measure==paint for vector inline runs; legacy intact\n" as *u8); sys_exit(0); return 0 }
100 gv_w("NX-INLINE-VEC-MEASURE RED fails=" as *u8); gv_n(fails); gv_w("\n" as *u8)
101 sys_exit(1); return 1
102}