code wiki / _hdl_build / nx_meet_store_gate.nx

nx_meet_store_gate.nx source

↩ module page · 44 lines · 3273 B

1// nx_meet_store_gate.nx -- liar-kill gate for P4 (durable member/application store over the seg-store). Proves 2// store -> read-back byte-exact, the meet:ids index tracks ids, an UPDATE (latest-value-wins) reflects the new 3// record (PENDING -> MEMBER), an absent id reads -1, and a never-stored id is not indexed (teeth). Idempotent-safe 4// on a persistent store. expect_exit: 0 5import "nx_syscalls.nx" 6import "nx_meet_lib.nx" 7import "nx_meet_store.nx" 8 9func eq_n(buf: *u8, len: i64, exp: *u8) -> i64 { 10 if len != mlen(exp) { return 0 } 11 var i: i64 = 0 12 while i < len { if buf[i] != exp[i] { return 0 } i = i + 1 } 13 return 1 14} 15 16func main() -> i64 { 17 mputs("=== nx_meet_store_gate: durable member store (seg-store, NO TSV) ===\n" as *u8) 18 let r1: *u8 = "kind: apply\nname: Jane Doe\nstatus: SCREENED" as *u8 19 let r1b: *u8 = "kind: apply\nname: Jane Doe\nstatus: MEMBER" as *u8 20 let r2: *u8 = "kind: hire\nname: Acme Inc\nstatus: SCREENED" as *u8 21 let pq: *i64 = sys_mmap(16) as *i64 22 let lq: *i64 = sys_mmap(16) as *i64 23 24 var pass: i64 = 0; var fail: i64 = 0 25 // put + read back byte-exact 26 if meet_store_put("m-gate-001" as *u8, r1) == 0 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL put-1\n" as *u8) } 27 if meet_store_get("m-gate-001" as *u8, pq, lq) == 1 { if eq_n(pq[0] as *u8, lq[0], r1) == 1 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL roundtrip-1\n" as *u8) } } else { fail=fail+1; mputs(" FAIL get-1-absent\n" as *u8) } 28 if meet_store_indexed("m-gate-001" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL not-indexed-1\n" as *u8) } 29 // a second member 30 if meet_store_put("m-gate-002" as *u8, r2) == 0 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL put-2\n" as *u8) } 31 if meet_store_get("m-gate-002" as *u8, pq, lq) == 1 { if eq_n(pq[0] as *u8, lq[0], r2) == 1 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL roundtrip-2\n" as *u8) } } else { fail=fail+1; mputs(" FAIL get-2-absent\n" as *u8) } 32 // UPDATE m-001 (latest-value-wins: SCREENED -> MEMBER) 33 if meet_store_put("m-gate-001" as *u8, r1b) == 0 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL update-1\n" as *u8) } 34 if meet_store_get("m-gate-001" as *u8, pq, lq) == 1 { if eq_n(pq[0] as *u8, lq[0], r1b) == 1 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL update-not-latest\n" as *u8) } } else { fail=fail+1; mputs(" FAIL get-1b-absent\n" as *u8) } 35 // index stays consistent after the idempotent update 36 if meet_store_indexed("m-gate-001" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL index-lost-after-update\n" as *u8) } 37 // TEETH: an absent id reads -1, and a never-stored id is not indexed 38 if meet_store_get("m-gate-nope" as *u8, pq, lq) == 0 - 1 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL absent-not--1\n" as *u8) } 39 if meet_store_indexed("m-gate-nope" as *u8) == 0 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL phantom-indexed\n" as *u8) } 40 41 mputs("MEET-STORE-GATE pass=" as *u8); mnum(pass); mputs(" fail=" as *u8); mnum(fail) 42 if fail == 0 { mputs(" verdict=GREEN (durable member store: roundtrip + index + latest-wins update, sovereign seg-store no-TSV)\n" as *u8); sys_exit(0); return 0 } 43 mputs(" verdict=RED\n" as *u8); sys_exit(1); return 1 44}