code wiki / _hdl_build / nx_doctor_queue_gate.nx

nx_doctor_queue_gate.nx source

↩ module page · 59 lines · 3683 B

1// nx_doctor_queue_gate.nx -- SOVEREIGN gate for the Doctor's serialized fix intake (doc_pump). 2// T1 pump processes both PENDING fixes (count=2) 3// T2 the APPLICABLE fix is applied (target rewritten) 4// T3 the queue lines are flipped: APPLIED for fix1, CONFLICT for fix2 (region absent -> refused, no clobber) 5// T4 idempotent: a second pump processes 0 (no PENDING left) 6// license_tier: ORIGINAL 7import "nx_syscalls.nx" 8import "nx_doctor_apply.nx" // da_read / da_slen / DA_CAP 9import "nx_doctor_queue.nx" // doc_pump 10 11const GQ_TGT: *u8 = "/tmp/dq_tgt" 12const GQ_Q: *u8 = "/tmp/dq_queue" 13const GQ_LED: *u8 = "/tmp/dq_ledger" 14 15func gq_uw(s: *u8) -> i64 { sys_write(1, s, da_slen(s)); return 0 } 16func gq_wn(v: i64) -> i64 { let b: *u8=sys_mmap(24); var m: i64=v; var k: i64=0; if m==0{b[0]=48 as u8;k=1} let t: *u8=sys_mmap(24); while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var o: *u8=sys_mmap(24); var w: i64=0; var q: i64=k-1; while q>=0{o[w]=t[q];w=w+1;q=q-1} sys_write(1,o,w); return 0 } 17func gq_write(path: *u8, s: *u8, len: i64) -> i64 { let fd: i64=sys_openat_wr(path, 0x1a4); if fd<0 {return 0-1} sys_write(fd, s, len); sys_close(fd); return 0 } 18func gq_contains(path: *u8, needle: *u8) -> i64 { 19 let buf: *u8 = sys_mmap(DA_CAP); let n: i64 = da_read(path, buf, DA_CAP); let nn: i64 = da_slen(needle) 20 if nn == 0 { return 1 } if n < nn { return 0 } 21 var i: i64 = 0 22 while i + nn <= n { var j: i64=0; var ok: i64=1; while j<nn { if buf[i+j]!=needle[j] {ok=0;j=nn} else {j=j+1} } if ok==1 {return 1} i=i+1 } 23 return 0 24} 25func gq_file_eq(path: *u8, exp: *u8) -> i64 { 26 let buf: *u8 = sys_mmap(DA_CAP); let n: i64 = da_read(path, buf, DA_CAP); let e: i64 = da_slen(exp) 27 if n != e { return 0 } var i: i64=0; while i<e { if buf[i]!=exp[i] {return 0} i=i+1 } return 1 28} 29 30func main(argc: i64, argv: *i64) -> i64 { 31 var pass: i64 = 0; var total: i64 = 0 32 33 // fixtures: target + two patch pairs (fix1 applicable, fix2 will-conflict) 34 gq_write(GQ_TGT, "alpha FOO omega" as *u8, 15) 35 gq_write("/tmp/dq_old1" as *u8, "FOO" as *u8, 3); gq_write("/tmp/dq_new1" as *u8, "BAR" as *u8, 3) 36 gq_write("/tmp/dq_old2" as *u8, "ZZZ" as *u8, 3); gq_write("/tmp/dq_new2" as *u8, "YYY" as *u8, 3) 37 // a 2-line PENDING queue (hand-written = same shape doc_submit appends) 38 gq_write(GQ_Q, "PENDING\t100\twsX\t/tmp/dq_tgt\t/tmp/dq_old1\t/tmp/dq_new1\nPENDING\t101\twsY\t/tmp/dq_tgt\t/tmp/dq_old2\t/tmp/dq_new2\n" as *u8, 110) 39 gq_write(GQ_LED, "" as *u8, 0) 40 41 let p1: i64 = doc_pump(GQ_Q, GQ_LED) 42 total=total+1; if p1==2 { pass=pass+1; gq_uw("[PASS] " as *u8) } else { gq_uw("[FAIL] " as *u8) } 43 gq_uw("T1 pump processed=" as *u8); gq_wn(p1); gq_uw(" (want 2)\n" as *u8) 44 45 total=total+1; if gq_file_eq(GQ_TGT, "alpha BAR omega" as *u8)==1 { pass=pass+1; gq_uw("[PASS] " as *u8) } else { gq_uw("[FAIL] " as *u8) } 46 gq_uw("T2 applicable fix applied -> 'alpha BAR omega'\n" as *u8) 47 48 var t3: i64=0; if gq_contains(GQ_Q, "APPLIED\t100" as *u8)==1 { if gq_contains(GQ_Q, "CONFLICT\t101" as *u8)==1 { t3=1 } } 49 total=total+1; if t3==1 { pass=pass+1; gq_uw("[PASS] " as *u8) } else { gq_uw("[FAIL] " as *u8) } 50 gq_uw("T3 queue flipped: fix1 APPLIED, fix2 CONFLICT (region absent -> refused)\n" as *u8) 51 52 let p2: i64 = doc_pump(GQ_Q, GQ_LED) 53 total=total+1; if p2==0 { pass=pass+1; gq_uw("[PASS] " as *u8) } else { gq_uw("[FAIL] " as *u8) } 54 gq_uw("T4 idempotent re-pump=" as *u8); gq_wn(p2); gq_uw(" (want 0)\n" as *u8) 55 56 gq_uw("=== nx_doctor_queue_gate " as *u8); gq_wn(pass); gq_uw("/" as *u8); gq_wn(total) 57 if pass==total { gq_uw(" GREEN\n" as *u8); return 0 } 58 gq_uw(" RED\n" as *u8); return 1 59}