code wiki / _hdl_build / nx_ecomat_put_gate.nx

nx_ecomat_put_gate.nx source

↩ module page · 72 lines · 4251 B

1// nx_ecomat_put_gate.nx -- gate for acl F771. PROVES the store-native domain add is APPEND (preserves 2// existing domains) on a THROWAWAY store, before nx_ecomat_put ever touches the live maturity store. 3// T1 seed 3 domains -> add a 4th via _offc/nx_ecomat_put.elf -> all 4 present (add-preserves-others) 4// T2 the added id3 carries the right domain string 5// T3 id4 absent (no over-add) -- NEGATIVE CONTROL 6// Unique per-run prefix (epoch) so the append-only /tmp store stays deterministic. license_tier: ORIGINAL 7import "nx_ecomat_lib.nx" 8import "nx_seg_store.nx" 9import "nx_tool_run.nx" 10 11func g_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 12func g_wn(fd: i64, v: i64) -> i64 { var m: i64 = v; if m < 0 { g_w(fd, "-" as *u8); m = 0 - m } let t: *u8 = sys_mmap(28); 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 o: *u8 = sys_mmap(28); var i: i64 = 0; while i < k { o[i] = t[k-1-i]; i = i + 1 } sys_write(fd, o, k); return 0 } 13func g_catn(buf: *u8, off: i64, v: i64) -> i64 { var m: i64 = v; if m < 0 { m = 0 } let t: *u8 = sys_mmap(28); 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 } var o: i64 = off; var i: i64 = 0; while i < k { buf[o] = t[k-1-i]; o = o + 1; i = i + 1 } return o } 14func main() -> i64 { 15 // unique throwaway prefix per run: /tmp/ecp<epoch>- 16 let pfx: *u8 = sys_mmap(64) 17 var o: i64 = 0 18 let base: *u8 = "/tmp/ecp" as *u8 19 var bi: i64 = 0 20 while base[bi] != (0 as u8) { pfx[o] = base[bi]; o = o + 1; bi = bi + 1 } 21 o = g_catn(pfx, o, sys_now_realtime_sec()) 22 pfx[o] = 45 as u8; o = o + 1 23 pfx[o] = 0 as u8 24 25 // seed 3 domains (ids 0,1,2) 26 let w: *i64 = ss_begin() 27 ec_seed_one(w, 0, 0, 1, 3, 5, 7, 1, "alpha" as *u8, "b0" as *u8, "n0" as *u8) 28 ec_seed_one(w, 1, 1, 1, 2, 5, 6, 1, "bravo" as *u8, "b1" as *u8, "n1" as *u8) 29 ec_seed_one(w, 2, 2, 1, 2, 5, 6, 1, "charlie" as *u8, "b2" as *u8, "n2" as *u8) 30 ss_commit(pfx, w, sys_now_realtime_sec()) 31 32 // add a 4th via the organ: addauto axis=1 layer=1 cur=2 bar=5 weight=7 domain=delta ... prefix=pfx 33 let av: *i64 = sys_mmap(128) as *i64 34 av[0] = "_offc/nx_ecomat_put.elf" as i64 35 av[1] = "addauto" as i64 36 av[2] = "1" as i64; av[3] = "1" as i64; av[4] = "2" as i64; av[5] = "5" as i64; av[6] = "7" as i64 37 av[7] = "delta" as i64; av[8] = "bd" as i64; av[9] = "nd" as i64 38 av[10] = "" as i64; av[11] = "" as i64; av[12] = pfx as i64; av[13] = 0 39 let ocap: i64 = 4096 40 let out: *u8 = sys_mmap(ocap) 41 let ol: *i64 = sys_mmap(16) as *i64 42 tr_run_capture("_offc/nx_ecomat_put.elf" as *u8, av, out, ocap, ol) 43 44 // verify against the throwaway store 45 let h: *i64 = ss_open(pfx) 46 let pq: *i64 = sys_mmap(16) as *i64 47 let lq: *i64 = sys_mmap(16) as *i64 48 var present: i64 = 0 49 var id: i64 = 0 50 while id < 4 { 51 let key: *u8 = sys_mmap(64); ec_key(id, key) 52 if ss_hget(h, key, pq, lq) == 1 { present = present + 1 } 53 id = id + 1 54 } 55 var dom3ok: i64 = 0 56 let k3: *u8 = sys_mmap(64); ec_key(3, k3) 57 if ss_hget(h, k3, pq, lq) == 1 { let dom: *u8 = sys_mmap(ECOMAT_DOM_CAP); ec_str(pq[0] as *u8, 0, dom, ECOMAT_DOM_CAP); if el_streq(dom, "delta" as *u8) == 1 { dom3ok = 1 } } 58 var id4absent: i64 = 1 59 let k4: *u8 = sys_mmap(64); ec_key(4, k4) 60 if ss_hget(h, k4, pq, lq) == 1 { id4absent = 0 } 61 62 var pass: i64 = 0 63 let tot: i64 = 3 64 if present == 4 { pass = pass + 1; g_w(1, "T1 add-preserves-others 4/4 present PASS\n" as *u8) } else { g_w(1, "T1 FAIL present=" as *u8); g_wn(1, present); g_w(1, "\n" as *u8) } 65 if dom3ok == 1 { pass = pass + 1; g_w(1, "T2 added id3 domain=delta PASS\n" as *u8) } else { g_w(1, "T2 FAIL\n" as *u8) } 66 if id4absent == 1 { pass = pass + 1; g_w(1, "T3 id4 absent no-over-add PASS (neg-control)\n" as *u8) } else { g_w(1, "T3 FAIL\n" as *u8) } 67 g_w(1, "ECOMAT-PUT-GATE pass=" as *u8); g_wn(1, pass); g_w(1, "/" as *u8); g_wn(1, tot) 68 if pass == tot { g_w(1, " verdict=GREEN\n" as *u8); sys_exit(0); return 0 } 69 g_w(1, " verdict=RED\n" as *u8) 70 sys_exit(1) 71 return 1 72}