code wiki / _hdl_build / nx_meet_store_gate.nx

nx_meet_store_gate.nx source

↩ module page · 52 lines · 3656 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" 8import "nx_gate_verdict.nx" 9 10func eq_n(buf: *u8, len: i64, exp: *u8) -> i64 { 11 if len != mlen(exp) { return 0 } 12 var i: i64 = 0 13 while i < len { if buf[i] != exp[i] { return 0 } i = i + 1 } 14 return 1 15} 16 17func main() -> i64 { 18 mputs("=== nx_meet_store_gate: durable member store (seg-store, NO TSV) ===\n" as *u8) 19 let r1: *u8 = "kind: apply\nname: Jane Doe\nstatus: SCREENED" as *u8 20 let r1b: *u8 = "kind: apply\nname: Jane Doe\nstatus: MEMBER" as *u8 21 let r2: *u8 = "kind: hire\nname: Acme Inc\nstatus: SCREENED" as *u8 22 let pq: *i64 = sys_mmap(16) as *i64 23 let lq: *i64 = sys_mmap(16) as *i64 24 25 var pass: i64 = 0; var fail: i64 = 0 26 // put + read back byte-exact 27 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) } 28 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) } 29 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) } 30 // a second member 31 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) } 32 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) } 33 // UPDATE m-001 (latest-value-wins: SCREENED -> MEMBER) 34 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) } 35 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) } 36 // index stays consistent after the idempotent update 37 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) } 38 // TEETH: an absent id reads -1, and a never-stored id is not indexed 39 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) } 40 if meet_store_indexed("m-gate-nope" as *u8) == 0 { pass=pass+1 } else { fail=fail+1; mputs(" FAIL phantom-indexed\n" as *u8) } 41 42 mputs("MEET-STORE-GATE pass=" as *u8); mnum(pass); mputs(" fail=" as *u8); mnum(fail) 43 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 44 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 45 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 46 let ctr__dry: *i64 = gv_ctr() 47 ctr__dry[0] = pass 48 ctr__dry[1] = pass + fail 49 let rc__dry: i64 = gv_verdict("MEET-STORE-GATE" as *u8, ctr__dry, "durable member store: roundtrip + index + latest-wins update, sovereign seg-store no-TSV)" as *u8) 50 sys_exit(rc__dry) 51 return rc__dry 52}