code wiki / _hdl_build / nx_ecomat_seed_gate.nx

nx_ecomat_seed_gate.nx source

↩ module page · 85 lines · 4840 B

1// nx_ecomat_seed_gate.nx -- proves the NATIVE seg_store round-trip (no TSV): author 2 records, 2// read them back byte/field-exact, and a NEGATIVE CONTROL (a missing key must NOT be found -- the 3// store never fabricates). license_tier: ORIGINAL 4import "nx_ecomat_lib.nx" 5 6// fill buf with n deterministic bytes + NUL -- builds an arbitrarily long field at runtime so the 7// bound tests do not depend on a giant string literal. 8func sg_fill(buf: *u8, n: i64) -> i64 { 9 var i: i64 = 0 10 while i < n { buf[i] = (97 + (i % 26)) as u8; i = i + 1 } 11 buf[n] = 0 as u8 12 return n 13} 14 15func main() -> i64 { 16 var fails: i64 = 0 17 let w: *i64 = ss_begin() 18 ec_seed_one(w, 0, 0, 1, 2, 5, 9, 1, "alpha" as *u8, "b1" as *u8, "n1" as *u8) 19 ec_seed_one(w, 1, 1, 7, 3, 5, 8, 1, "beta" as *u8, "b2" as *u8, "n2" as *u8) 20 ss_commit("/tmp/ecomat_seedtest" as *u8, w, sys_now_realtime_sec()) 21 let h: *i64 = ss_open("/tmp/ecomat_seedtest" as *u8) 22 let pq: *i64 = sys_mmap(16) as *i64 23 let lq: *i64 = sys_mmap(16) as *i64 24 let dom: *u8 = sys_mmap(ECOMAT_DOM_CAP) 25 let nr: *u8 = sys_mmap(ECOMAT_NR_CAP) 26 // row 0: all fields exact 27 let k0: *u8 = sys_mmap(64); ec_key(0, k0) 28 if ss_hget(h, k0, pq, lq) == 1 { 29 let v: *u8 = pq[0] as *u8 30 if ec_axis(v) != 0 { fails = fails + 1 } 31 if ec_cur(v) != 2 { fails = fails + 1 } 32 if ec_bar(v) != 5 { fails = fails + 1 } 33 if ec_weight(v) != 9 { fails = fails + 1 } 34 ec_str(v, 0, dom, ECOMAT_DOM_CAP); if el_streq(dom, "alpha" as *u8) == 0 { fails = fails + 1 } 35 ec_str(v, 2, nr, ECOMAT_NR_CAP); if el_streq(nr, "n1" as *u8) == 0 { fails = fails + 1 } 36 // T-STRCAP neg-control: a too-small out must be REFUSED (-1) and left EMPTY. A truncated but 37 // plausible domain name silently reaching a caller is the failure this bound exists to stop. 38 let tiny: *u8 = sys_mmap(64) 39 tiny[0] = 88 as u8 40 if ec_str(v, 0, tiny, 3) != (0 - 1) { fails = fails + 1 } 41 if tiny[0] != (0 as u8) { fails = fails + 1 } 42 } else { fails = fails + 1 } 43 // row 1: axis/cur + a different string field 44 let k1: *u8 = sys_mmap(64); ec_key(1, k1) 45 if ss_hget(h, k1, pq, lq) == 1 { 46 let v: *u8 = pq[0] as *u8 47 if ec_axis(v) != 1 { fails = fails + 1 } 48 if ec_cur(v) != 3 { fails = fails + 1 } 49 ec_str(v, 1, dom, ECOMAT_DOM_CAP); if el_streq(dom, "b2" as *u8) == 0 { fails = fails + 1 } 50 } else { fails = fails + 1 } 51 // NEG-CONTROL: a missing key must NOT be found 52 let kn: *u8 = sys_mmap(64); ec_key(99, kn) 53 if ss_hget(h, kn, pq, lq) == 1 { fails = fails + 1 } 54 // T-EXACT: ec_reclen must equal what ec_pack actually writes -- if the derived size were merely 55 // "big enough" the two could drift and the guard would fire on valid rows. 56 let need: i64 = ec_reclen("alpha" as *u8, "b1" as *u8, "n1" as *u8, "" as *u8, "" as *u8, "" as *u8, "" as *u8) 57 let tb: *u8 = sys_mmap(need) 58 if ec_pack(tb, need, 0, 1, 2, 5, 9, 1, 0, 0, "alpha" as *u8, "b1" as *u8, "n1" as *u8, "" as *u8, "" as *u8, "" as *u8, "" as *u8) != need { fails = fails + 1 } 59 // T-REFUSE neg-control: one byte short must FAIL CLOSED (-1), never a partial record. 60 if ec_pack(tb, need - 1, 0, 1, 2, 5, 9, 1, 0, 0, "alpha" as *u8, "b1" as *u8, "n1" as *u8, "" as *u8, "" as *u8, "" as *u8, "" as *u8) != (0 - 1) { fails = fails + 1 } 61 62 // T-LONG: the REGRESSION WITNESS for the domain that died as "record too large" -- a next-rung 63 // far past the old fixed 512/1024 buffers. Derived sizing must pack AND round-trip it byte-exact. 64 let big: *u8 = sys_mmap(4096) 65 sg_fill(big, 2000) 66 let w2: *i64 = ss_begin() 67 if ec_seed_one(w2, 0, 0, 1, 2, 5, 9, 1, "lab-science" as *u8, "USP-ICH-Q1A-AOAC-PubChem" as *u8, big) != 0 { fails = fails + 1 } 68 ss_commit("/tmp/ecomat_bigtest" as *u8, w2, sys_now_realtime_sec()) 69 let h2: *i64 = ss_open("/tmp/ecomat_bigtest" as *u8) 70 let kb: *u8 = sys_mmap(64); ec_key(0, kb) 71 if ss_hget(h2, kb, pq, lq) == 1 { 72 let v2: *u8 = pq[0] as *u8 73 let back: *u8 = sys_mmap(4096) 74 if ec_str(v2, 2, back, 4096) != 2000 { fails = fails + 1 } 75 if el_streq(back, big) == 0 { fails = fails + 1 } 76 let d2: *u8 = sys_mmap(ECOMAT_DOM_CAP) 77 ec_str(v2, 0, d2, ECOMAT_DOM_CAP); if el_streq(d2, "lab-science" as *u8) == 0 { fails = fails + 1 } 78 } else { fails = fails + 1 } 79 80 _p("seed-gate native round-trip ... fails=" as *u8); _fn(1, fails); _p("\n" as *u8) 81 if fails == 0 { _p("GATE nx_ecomat_seed verdict=GREEN pass=18/18 (round-trip + missing-key neg-ctrl + ec_reclen-exact + pack-refuse + str-cap-refuse + 2000B long-row witness)\n" as *u8); sys_exit(0); return 0 } 82 _p("GATE nx_ecomat_seed verdict=RED fails=" as *u8); _fn(1, fails); _p("\n" as *u8) 83 sys_exit(1) 84 return 1 85}