code wiki / _hdl_build / nx_seg_columnar_gate.nx

nx_seg_columnar_gate.nx source

↩ module page · 43 lines · 2803 B

1import "nx_gate_gn.nx" 2// nx_seg_columnar_gate.nx -- exceed-gate for CAP-SEG-COLUMNAR. Proves lossless compression on a column: RLE encodes 3// runs to fewer pairs and decodes back byte-exact; dictionary reduces a low-cardinality column to distinct values + 4// small ids and decodes back byte-exact. This is the analytic-scan win a row store can't give. 5// Sovereign: nx_syscalls + nx_seg_columnar. expect_exit: 0 6import "nx_syscalls.nx" 7import "nx_seg_columnar.nx" 8 9func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 10func geq(a: *i64, b: *i64, n: i64) -> i64 { var i: i64=0; while i<n { if a[i]!=b[i] { return 0 } i=i+1 } return 1 } 11 12func main(argc: i64, argv: *i64) -> i64 { 13 gp("=== nx_seg_columnar_gate (columnar RLE + dictionary compression, lossless) ===\n" as *u8) 14 var pass: i64=0; var fail: i64=0 15 16 // RLE column: 8 values with runs -> 3 (count,value) runs 17 let vals: *i64=sys_mmap(8*8) as *i64 18 vals[0]=5; vals[1]=5; vals[2]=5; vals[3]=5; vals[4]=3; vals[5]=3; vals[6]=3; vals[7]=9 19 let pairs: *i64=sys_mmap(8*16) as *i64 20 let np: i64 = col_rle_encode(vals, 8, pairs) 21 if np == 3 { pass=pass+1; gp(" T1 RLE encode 8 values -> 3 runs PASS\n" as *u8) } else { fail=fail+1; gp(" T1 FAIL np=" as *u8); gn(np); gp("\n" as *u8) } 22 23 let dec: *i64=sys_mmap(8*16) as *i64 24 let dn2: i64 = col_rle_decode(pairs, np, dec) 25 if dn2 == 8 { if geq(dec, vals, 8)==1 { pass=pass+1; gp(" T2 RLE decode -> 8 values byte-exact (lossless round-trip) PASS\n" as *u8) } else { fail=fail+1; gp(" T2 FAIL bytes\n" as *u8) } } else { fail=fail+1; gp(" T2 FAIL count\n" as *u8) } 26 27 if np*2 < 8 { pass=pass+1; gp(" T3 compressed: " as *u8); gn(np*2); gp(" ints < 8 raw PASS\n" as *u8) } else { fail=fail+1; gp(" T3 FAIL no compression\n" as *u8) } 28 29 // DICTIONARY column: 5 rows, 2 distinct 30 let dv: *i64=sys_mmap(8*8) as *i64 31 dv[0]=100; dv[1]=200; dv[2]=100; dv[3]=100; dv[4]=200 32 let dict: *i64=sys_mmap(8*8) as *i64; let ids: *i64=sys_mmap(8*8) as *i64 33 let card: i64 = col_dict_encode(dv, 5, dict, ids) 34 if card == 2 { pass=pass+1; gp(" T4 dict encode: cardinality 2 < 5 rows (low-card compressed) PASS\n" as *u8) } else { fail=fail+1; gp(" T4 FAIL card=" as *u8); gn(card); gp("\n" as *u8) } 35 36 let dd: *i64=sys_mmap(8*8) as *i64 37 col_dict_decode(dict, ids, 5, dd) 38 if geq(dd, dv, 5)==1 { pass=pass+1; gp(" T5 dict decode -> byte-exact (lossless round-trip) PASS\n" as *u8) } else { fail=fail+1; gp(" T5 FAIL\n" as *u8) } 39 40 gp("RESULT pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail) 41 if fail == 0 { gp(" verdict=GREEN (columnar layout + lossless RLE/dict compression -- analytic-scan class)\n" as *u8); sys_exit(0); return 0 } 42 gp(" verdict=RED\n" as *u8); sys_exit(1); return 1 43}