code wiki / _hdl_build / _census_run_gate_authored.nx

_census_run_gate_authored.nx source

↩ module page · 151 lines · 6101 B

1// _census_run_gate_authored.nx -- gate for X-AUT-003 (nx_census_run). Scratch worlds: 2// K1 GAP-NAMED universe item absent from target -> CENSUS-GAP row + verdict=GAPS (exit 0) 3// K2 COVERED all items present -> gaps=0 + verdict=COVERED 4// K3 LIVE real census.conf -> exit 0 + CENSUS-RUN row present 5// Markers: CSG-*; final CSGATE row -> knowledge/status/census_run.log 6// license_tier: ORIGINAL 7import "nx_syscalls.nx" 8func cg_p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 9func cg_f(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 } 10func cg_n(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(fd,"-" 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(fd,bb,k); return 0 } 11func cg_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 12func cg_cat(dst: *u8, off: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { dst[off+i] = s[i]; i = i + 1 } return off + i } 13func cg_numcat(dst: *u8, off: i64, v: i64) -> i64 { 14 let t: *u8 = sys_mmap(28) 15 var m: i64 = v 16 var k: i64 = 0 17 if m == 0 { t[0] = 48 as u8; k = 1 } 18 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 19 var i: i64 = 0 20 var o: i64 = off 21 while i < k { dst[o] = t[k-1-i]; o = o + 1; i = i + 1 } 22 return o 23} 24func cg_mkpath(dst: *u8, epoch: i64, suffix: *u8) -> i64 { 25 var o: i64 = cg_cat(dst, 0, "/tmp/csg_" as *u8) 26 o = cg_numcat(dst, o, epoch) 27 o = cg_cat(dst, o, suffix) 28 dst[o] = 0 as u8 29 return o 30} 31func cg_writes(path: *u8, s: *u8) -> i64 { 32 let fd: i64 = sys_openat_wr(path, 0x1a4) 33 if fd < 0 { return 0 } 34 sys_write(fd, s, cg_len(s)) 35 sys_close(fd) 36 return 1 37} 38func cg_writeb(path: *u8, buf: *u8, n: i64) -> i64 { 39 let fd: i64 = sys_openat_wr(path, 0x1a4) 40 if fd < 0 { return 0 } 41 sys_write(fd, buf, n) 42 sys_close(fd) 43 return 1 44} 45func cg_run(cp: *u8, lp: *u8, live: i64) -> i64 { 46 let pid: i64 = sys_fork() 47 if pid == 0 { 48 let dn: i64 = sys_openat_wr("/dev/null" as *u8, 0x1a4) 49 if dn >= 0 { sys_dup3(dn, 1, 0); sys_dup3(dn, 2, 0) } 50 let argv: *i64 = sys_mmap(40) as *i64 51 argv[0] = "/tmp/nx_census_run.sov.elf" as *u8 as i64 52 if live == 0 { 53 argv[1] = cp as i64 54 argv[2] = lp as i64 55 argv[3] = 0 56 } else { 57 argv[1] = 0 58 } 59 let envp: *i64 = sys_mmap(16) as *i64 60 envp[0] = 0 61 sys_execve("/tmp/nx_census_run.sov.elf" as *u8, argv, envp) 62 sys_exit(127) 63 } 64 let st: *i64 = sys_mmap(16) as *i64 65 sys_wait4(pid, st, 0) 66 if (st[0] % 128) != 0 { return 0 - 1 } 67 return (st[0] >> 8) & 0xff 68} 69func cg_has(path: *u8, pat: *u8) -> i64 { 70 let buf: *u8 = sys_mmap(262144) 71 let fd: i64 = sys_openat_rd(path) 72 if fd < 0 { return 0 } 73 var n: i64 = 0 74 var go: i64 = 1 75 while go == 1 { let base: i64 = buf as i64; let r: i64 = sys_read(fd, (base + n) as *u8, 262128 - n); if r <= 0 { go = 0 } else { n = n + r } if n >= 262128 { go = 0 } } 76 sys_close(fd) 77 let pl: i64 = cg_len(pat) 78 if pl == 0 { return 0 } 79 var i: i64 = 0 80 while i + pl <= n { 81 var k: i64 = 0 82 var hit: i64 = 1 83 while k < pl { if buf[i+k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } } 84 if hit == 1 { return 1 } 85 i = i + 1 86 } 87 return 0 88} 89func cg_chk(label: *u8, ok: i64, bad: *i64) -> i64 { 90 cg_p("CSG-" as *u8) 91 cg_p(label) 92 if ok == 1 { cg_p(" ok\n" as *u8) } else { cg_p(" BAD\n" as *u8); bad[0] = bad[0] + 1 } 93 return 0 94} 95func main() -> i64 { 96 cg_p("=== CENSUS-RUN GATE: scratch coverage worlds + live ===\n" as *u8) 97 let ep: i64 = sys_now_realtime_sec() 98 let bad: *i64 = sys_mmap(16) as *i64 99 bad[0] = 0 100 let u1: *u8 = sys_mmap(128) 101 let t1: *u8 = sys_mmap(128) 102 let c1: *u8 = sys_mmap(128) 103 let l1: *u8 = sys_mmap(128) 104 let l2: *u8 = sys_mmap(128) 105 cg_mkpath(u1, ep, "_u.txt" as *u8) 106 cg_mkpath(t1, ep, "_t.tsv" as *u8) 107 cg_mkpath(c1, ep, "_c.conf" as *u8) 108 cg_mkpath(l1, ep, "_l1.log" as *u8) 109 cg_mkpath(l2, ep, "_l2.log" as *u8) 110 // universe: two rows ALPHA + BETA; target covers only ALPHA 111 cg_writes(u1, "A ALPHA some/log ANCH green\nA BETA some/log ANCH green\n" as *u8) 112 cg_writes(t1, "ALPHA\tarc\tR\tA\tC\tI\tev\n" as *u8) 113 let cb: *u8 = sys_mmap(512) 114 var o: i64 = cg_cat(cb, 0, "C k1 " as *u8) 115 o = cg_cat(cb, o, u1) 116 o = cg_cat(cb, o, " A_ tok2 " as *u8) 117 o = cg_cat(cb, o, t1) 118 o = cg_cat(cb, o, "\n" as *u8) 119 cg_writeb(c1, cb, o) 120 // K1 GAP-NAMED 121 let r1: i64 = cg_run(c1, l1, 0) 122 var ok1: i64 = 0 123 if r1 == 0 { if cg_has(l1, "CENSUS-GAP census=k1 item=BETA" as *u8) == 1 { if cg_has(l1, "verdict=GAPS" as *u8) == 1 { ok1 = 1 } } } 124 cg_chk("GAP-NAMED" as *u8, ok1, bad) 125 // K2 COVERED: extend target with BETA 126 cg_writes(t1, "ALPHA\tarc\tR\tA\tC\tI\tev\nBETA\tarc\tR\tA\tC\tI\tev\n" as *u8) 127 let r2: i64 = cg_run(c1, l2, 0) 128 var ok2: i64 = 0 129 if r2 == 0 { if cg_has(l2, "gaps_total=0" as *u8) == 1 { if cg_has(l2, "verdict=COVERED" as *u8) == 1 { ok2 = 1 } } } 130 cg_chk("COVERED" as *u8, ok2, bad) 131 // K3 LIVE 132 let r3: i64 = cg_run(c1, l1, 1) 133 var ok3: i64 = 0 134 if r3 == 0 { ok3 = 1 } 135 cg_chk("LIVE" as *u8, ok3, bad) 136 let lg: i64 = sys_openat_append("knowledge/status/census_run.log" as *u8, 0x1a4) 137 if lg >= 0 { 138 cg_f(lg, "CSGATE checks=" as *u8) 139 cg_n(lg, 3 - bad[0]) 140 cg_f(lg, "/3 verdict=" as *u8) 141 if bad[0] == 0 { cg_f(lg, "GREEN" as *u8) } else { cg_f(lg, "RED" as *u8) } 142 cg_f(lg, " epoch=" as *u8) 143 cg_n(lg, sys_now_realtime_sec()) 144 cg_f(lg, "\n" as *u8) 145 sys_close(lg) 146 } 147 if bad[0] == 0 { cg_p(" CSGATE: GREEN 3/3\n" as *u8); sys_exit(0); return 0 } 148 cg_p(" CSGATE: RED\n" as *u8) 149 sys_exit(1) 150 return 1 151}