code wiki / _hdl_build / nx_galx_cid_index_gate.nx

nx_galx_cid_index_gate.nx source

↩ module page · 77 lines · 4606 B

1// nx_galx_cid_index_gate.nx -- SOVEREIGN gate for the O(1) cid->path store. 2// Builds a synthetic cid_paths.tsv (N unique cids -> paths), builds the index+blob, then verifies EVERY cid 3// resolves to its exact path (build + open-addressing + blob offsets all correct) and a non-existent cid is a 4// clean miss. Every number printed. GREEN iff all N resolve correctly AND the miss is rejected. 5// license_tier: ORIGINAL 6import "nx_syscalls.nx" 7import "nx_g_puts_lib.nx" 8import "nx_galx_cid_index.nx" 9 10func g_num(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; 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 i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 11func g_streq(a: *u8, b: *u8) -> i64 { var i: i64=0; while a[i]!=(0 as u8) { if a[i]!=b[i] { return 0 } i=i+1 } if b[i]!=(0 as u8) { return 0 } return 1 } 12func g_itoa(v: i64, out: *u8) -> i64 { if v==0 { out[0]=48 as u8; return 1 } let t: *u8=sys_mmap(28); var m: i64=v; var k: i64=0; while m>0{t[k]=((48+(m%10)) as u8);m=m/10;k=k+1}; var i: i64=0; while i<k{out[i]=t[k-1-i];i=i+1}; return k } 13 14func to_hex16(v: i64, out: *u8) -> i64 { let hx: *u8="0123456789abcdef" as *u8; var i: i64=0; while i<16 { let sh: i64=(15-i)*4; out[i]=hx[(v>>sh)&15]; i=i+1 } return 0 } 15// cid = "nxc1-" + 16 hex(id) + 48 '0' = 69 chars, NUL-terminated. Unique per id. 16func make_cid(idv: i64, out: *u8) -> i64 { 17 out[0]=110 as u8; out[1]=120 as u8; out[2]=99 as u8; out[3]=49 as u8; out[4]=45 as u8 18 to_hex16(idv, ((out as i64)+5) as *u8) 19 var i: i64=21; while i<69 { out[i]=48 as u8; i=i+1 } out[69]=0 as u8 20 return 0 21} 22// path = "/vol/img/<id>.png", NUL-terminated; returns len. 23func make_path(idv: i64, out: *u8) -> i64 { 24 var o: i64=0; let pre: *u8="/vol/img/" as *u8; var j: i64=0; while pre[j]!=(0 as u8){out[o]=pre[j];o=o+1;j=j+1} 25 o = o + g_itoa(idv, ((out as i64)+o) as *u8) 26 let suf: *u8=".png" as *u8; j=0; while suf[j]!=(0 as u8){out[o]=suf[j];o=o+1;j=j+1} 27 out[o]=0 as u8; return o 28} 29 30func main() -> i64 { 31 g_puts("=== GALX CID-INDEX GATE: sovereign O(1) cid->path store ===\n" as *u8) 32 let N: i64 = 2000 33 // build synthetic tsv 34 let tsv: *u8 = sys_mmap(N * 128) 35 var off: i64 = 0 36 let cid: *u8 = sys_mmap(96); let path: *u8 = sys_mmap(256) 37 var i: i64 = 0 38 while i < N { 39 make_cid(i, cid); var c: i64=0; while c<69 { tsv[off]=cid[c]; off=off+1; c=c+1 } 40 tsv[off]=9 as u8; off=off+1 41 let pl: i64 = make_path(i, path); var p: i64=0; while p<pl { tsv[off]=path[p]; off=off+1; p=p+1 } 42 tsv[off]=10 as u8; off=off+1 43 i = i + 1 44 } 45 let fa: i64 = sys_openat_wr("/tmp/cidx_test.tsv" as *u8, 0x1a4); sys_write(fa, tsv, off); sys_close(fa) 46 g_puts(" built synthetic tsv: entries="); g_num(N); g_puts(" bytes="); g_num(off); g_puts("\n" as *u8) 47 48 // build index 49 let nent: i64 = gs_cidindex_build("/tmp/cidx_test.tsv" as *u8, "/tmp/cidx.idx" as *u8, "/tmp/cidx.blob" as *u8) 50 g_puts(" gs_cidindex_build -> n_entries="); g_num(nent); g_puts("\n" as *u8) 51 52 // open 53 let szp: *i64 = sys_mmap(16) as *i64; let idx: *u8 = sys_read_file("/tmp/cidx.idx" as *u8, szp) 54 let szp2: *i64 = sys_mmap(16) as *i64; let blob: *u8 = sys_read_file("/tmp/cidx.blob" as *u8, szp2) 55 let nb: i64 = cidx_rd64(idx, 0) 56 g_puts(" opened idx: n_buckets="); g_num(nb); g_puts(" idx_bytes="); g_num(szp[0]); g_puts(" blob_bytes="); g_num(szp2[0]); g_puts("\n" as *u8) 57 58 // verify every cid resolves to its exact path 59 let out: *u8 = sys_mmap(256); let exp: *u8 = sys_mmap(256) 60 var ok: i64=0; var bad: i64=0; i=0 61 while i < N { 62 make_cid(i, cid); make_path(i, exp) 63 let f: i64 = gs_cidindex_lookup(idx, blob, nb, cid, out) 64 if f == 1 { if g_streq(out, exp) == 1 { ok = ok + 1 } else { bad = bad + 1 } } else { bad = bad + 1 } 65 i = i + 1 66 } 67 g_puts(" lookups: ok="); g_num(ok); g_puts("/"); g_num(N); g_puts(" wrong/missing="); g_num(bad); g_puts("\n" as *u8) 68 69 // verify a non-existent cid is a clean miss 70 make_cid(7777777, cid) 71 let mf: i64 = gs_cidindex_lookup(idx, blob, nb, cid, out) 72 g_puts(" miss test (absent cid): found="); g_num(mf); g_puts(" (expect 0)\n" as *u8) 73 74 g_puts("----\n" as *u8) 75 if ok == N { if bad == 0 { if mf == 0 { g_puts("GALXCIDX GREEN (all "); g_num(N); g_puts(" cids resolve O(1); absent cid rejected; sovereign idx+blob, no TSV scan)\n" as *u8); sys_exit(0); return 0 } } } 76 g_puts("GALXCIDX RED\n" as *u8); sys_exit(1); return 1 77}