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}