code wiki / _hdl_build / nx_uiq_atree.nx

nx_uiq_atree.nx source

↩ module page · 64 lines · 3635 B

1// nx_uiq_atree.nx -- CLI: ARIA-tree snapshot + Zhang-Shasha structural diff (F106b experiential). 2// usage: nx_uiq_atree --kat (self-test: node counts + TED oracle 0/1/1/1 + mask) 3// nx_uiq_atree snap <html-file> (prints the role-tree snapshot + node count) 4// nx_uiq_atree ted <htmlA> <htmlB> (JSON: nodes_a/nodes_b/ted/verdict IDENTICAL|CHANGED) 5// license_tier: ORIGINAL expect_exit: 0 genealogy: F106b; family nx_uiq_color/contrast/perf/console 6import "nx_uiq_atree_lib.nx" 7 8func main(argc: i64, argv: *i64) -> i64 { 9 if argc>=2 { 10 let a1: *u8 = argv[1] as *u8 11 if a1[0]==(45 as u8) { 12 uiq_w("=== nx_uiq_atree --kat (ARIA-tree + ZSS TED, computed) ===\n" as *u8) 13 let f: i64 = at_selftest() 14 uiq_w("checks failed=" as *u8); uiq_pn(f); uiq_w(" (node counts + TED 0/1/1/1 + symmetry + script-mask)\n" as *u8) 15 if f==0 { uiq_w("VERDICT=GREEN\n" as *u8); sys_exit(0); return 0 } 16 uiq_w("VERDICT=RED\n" as *u8); sys_exit(1); return 1 17 } 18 let vl: i64 = cs_len(a1) 19 if at_tag_eq(a1, 0, vl, "snap" as *u8)==1 { 20 if argc<3 { uiq_w("usage: nx_uiq_atree snap <html-file>\n" as *u8); sys_exit(2); return 2 } 21 let p: *u8 = argv[2] as *u8 22 let cap: i64 = CS_CAP_BUF 23 let buf: *u8 = sys_mmap(cap) 24 let n: i64 = cs_slurp(p, buf, cap) 25 if n<=0 { uiq_w("ATREE-ERROR cannot read page\n" as *u8); sys_exit(2); return 2 } 26 let t: *i64 = sys_mmap(AT_SLOTS*8) as *i64 27 let nn: i64 = at_build(buf, n, t) 28 at_snap(t) 29 uiq_w("ATREE nodes=" as *u8); uiq_pn(nn-1) 30 uiq_w(" capped=" as *u8); uiq_pn(t[1]) 31 uiq_w(" env=script-masked;generic-skipped;unlabeled-section-form=generic(chrome-ax-calibrated);scoped-header-footer-demoted;CSS-visibility-BLIND(display-none subtrees counted; measured +23 links on a toggled menu);node-cap-512;depth-cap-64\n" as *u8) 32 sys_exit(0); return 0 33 } 34 if at_tag_eq(a1, 0, vl, "ted" as *u8)==1 { 35 if argc<4 { uiq_w("usage: nx_uiq_atree ted <htmlA> <htmlB>\n" as *u8); sys_exit(2); return 2 } 36 let pa: *u8 = argv[2] as *u8 37 let pb: *u8 = argv[3] as *u8 38 let cap: i64 = CS_CAP_BUF 39 let ba: *u8 = sys_mmap(cap) 40 let bb: *u8 = sys_mmap(cap) 41 let na: i64 = cs_slurp(pa, ba, cap) 42 let nb: i64 = cs_slurp(pb, bb, cap) 43 if na<=0 { uiq_w("ATREE-ERROR cannot read A\n" as *u8); sys_exit(2); return 2 } 44 if nb<=0 { uiq_w("ATREE-ERROR cannot read B\n" as *u8); sys_exit(2); return 2 } 45 let ta: *i64 = sys_mmap(AT_SLOTS*8) as *i64 46 let tb: *i64 = sys_mmap(AT_SLOTS*8) as *i64 47 let ca: i64 = at_build(ba, na, ta) 48 let cb: i64 = at_build(bb, nb, tb) 49 let d: i64 = at_ted(ta, tb) 50 uiq_w("{\"organ\":\"nx_uiq_atree\",\"verb\":\"ted\",\"nodes_a\":" as *u8) 51 uiq_pn(ca-1) 52 uiq_w(",\"nodes_b\":" as *u8) 53 uiq_pn(cb-1) 54 uiq_w(",\"ted\":" as *u8) 55 uiq_pn(d) 56 uiq_w(",\"verdict\":\"" as *u8) 57 if d==0 { uiq_w("IDENTICAL" as *u8) } else { if d<0 { uiq_w("CAPPED-REFUSED" as *u8) } else { uiq_w("CHANGED" as *u8) } } 58 uiq_w("\",\"env\":\"script-masked;generic-skipped;node-cap-512-refuses-ted;ins-del-rename-cost-1\"}\n" as *u8) 59 sys_exit(0); return 0 60 } 61 } 62 uiq_w("usage: nx_uiq_atree --kat | snap <html-file> | ted <htmlA> <htmlB>\n" as *u8) 63 sys_exit(2); return 2 64}