code wiki / _hdl_build / nx_cidx_equiv_gate.nx

nx_cidx_equiv_gate.nx source

↩ module page · 73 lines · 4271 B

1// nx_cidx_equiv_gate.nx -- PROOF (re-runnable) that the per-box computed-decl INDEX (the eagler paint-cliff 2// fix) is a pure accelerator: for EVERY box of a real page and every paint-side resolver (bg, border, 3// color, font-size int), the bucketed answer EQUALS the full-scan answer. T2 is the can-fail control: the 4// index genuinely engages (buckets are smaller than the whole array). If the stable-bucket reorder ever 5// broke cascade order, T1 catches it on the first divergent box. license_tier: ORIGINAL expect_exit: 0 6import "nx_syscalls.nx" 7import "nx_browser_render.nx" 8 9func gq_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 gq_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 } 11 12func main() -> i64 { 13 gq_w("=== nx_cidx_equiv_gate -- bucketed cascade lookups == full scans (paint-cliff fix is pure) ===\n" as *u8) 14 let lb: *i64 = sys_mmap(16) as *i64 15 let html: *u8 = sys_read_file("knowledge/experiential_index.html\x00" as *u8, lb) 16 if (html as i64) == 0 { gq_w("no fixture page\n" as *u8); sys_exit(2); return 2 } 17 let page: *Page = sys_mmap(NX_PAGE_BYTES) as *Page 18 page.raw = html 19 page.raw_len = lb[0] 20 page.dark_mode = 0 21 br_layout(page, 1024) // builds the index at the end 22 let t: *LayoutTree = page.tree 23 let src: *u8 = page.buf 24 let comp: *CssComputedDecl = page.computed 25 let nc: i64 = page.ncomp 26 let wout1: *i64 = sys_mmap(16) as *i64 27 let wout2: *i64 = sys_mmap(16) as *i64 28 var fails: i64 = 0 29 var i: i64 = 0 30 while i < t.count { 31 // bucketed answers (index ON, as br_layout left it) 32 br_cidx_on = 1 33 let bg1: i64 = br_comp_bg(src, comp, nc, i) 34 let bc1: i64 = br_comp_border(src, comp, nc, i, wout1) 35 let co1: i64 = br_comp_color(src, comp, nc, i, "color\x00" as *u8, 5) 36 let fs1: i64 = br_comp_int(src, comp, nc, i, "font-size\x00" as *u8, 9, 16) 37 // full-scan answers (index OFF) 38 br_cidx_on = 0 39 let bg2: i64 = br_comp_bg(src, comp, nc, i) 40 let bc2: i64 = br_comp_border(src, comp, nc, i, wout2) 41 let co2: i64 = br_comp_color(src, comp, nc, i, "color\x00" as *u8, 5) 42 let fs2: i64 = br_comp_int(src, comp, nc, i, "font-size\x00" as *u8, 9, 16) 43 if bg1 != bg2 { fails=fails+1; gq_w(" DIVERGE bg box " as *u8); gq_n(i); gq_w("\n" as *u8) } 44 if bc1 != bc2 { fails=fails+1; gq_w(" DIVERGE border box " as *u8); gq_n(i); gq_w("\n" as *u8) } 45 if wout1[0] != wout2[0] { fails=fails+1; gq_w(" DIVERGE border-w box " as *u8); gq_n(i); gq_w("\n" as *u8) } 46 if co1 != co2 { fails=fails+1; gq_w(" DIVERGE color box " as *u8); gq_n(i); gq_w("\n" as *u8) } 47 if fs1 != fs2 { fails=fails+1; gq_w(" DIVERGE font-size box " as *u8); gq_n(i); gq_w("\n" as *u8) } 48 i = i + 1 49 } 50 br_cidx_on = 1 51 gq_w(" T1 equivalence over " as *u8); gq_n(t.count) 52 gq_w(" boxes x 4 resolvers: " as *u8) 53 if fails == 0 { gq_w("PASS (0 divergences)\n" as *u8) } else { gq_w("FAIL\n" as *u8) } 54 55 // T2 CAN-FAIL: the index genuinely engages -- some box's bucket is much smaller than ncomp 56 var engaged: i64 = 0 57 if br_cidx_nbox == t.count { 58 let cc: *i64 = br_cidx_cnt as *i64 59 var mx: i64 = 0 60 var s: i64 = 0 61 var k: i64 = 0 62 while k < br_cidx_nbox { if cc[k] > mx { mx = cc[k] } s = s + cc[k]; k = k + 1 } 63 gq_w(" T2 index engaged: ncomp=" as *u8); gq_n(nc) 64 gq_w(" bucketed=" as *u8); gq_n(s) 65 gq_w(" max-bucket=" as *u8); gq_n(mx) 66 if mx < nc { if s > 0 { engaged = 1 } } 67 } 68 if engaged == 1 { gq_w(" PASS (buckets < whole array -> lookups genuinely bounded)\n" as *u8) } else { fails=fails+1; gq_w(" FAIL (index vacuous)\n" as *u8) } 69 70 if fails == 0 { gq_w("NX-CIDX-EQUIV GREEN -- the index is a pure accelerator (same answers, bounded scans)\n" as *u8); sys_exit(0); return 0 } 71 gq_w("NX-CIDX-EQUIV RED fails=" as *u8); gq_n(fails); gq_w("\n" as *u8) 72 sys_exit(1); return 1 73}