code wiki / _hdl_build / nx_dr_schedule_gate.nx

nx_dr_schedule_gate.nx source

↩ module page · 29 lines · 2319 B

1// nx_dr_schedule_gate.nx -- exceed-gate for CAP-DR-SCHEDULE. Proves the due-policy: elapsed>=interval => DUE, 2// elapsed<interval => waiting, boundary exact => DUE, never-run(last=0) => DUE, just-ran => waiting. 3// Sovereign: nx_syscalls. expect_exit: 0 4import "nx_syscalls.nx" 5import "nx_gate_verdict.nx" 6 7func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 8func gn(v: i64) -> i64 { var t: i64=v; if t<0{sys_write(1,"-" as *u8,1);t=0-t} let tm:*u8=sys_mmap(24); var k:i64=0; if t==0{tm[0]=48 as u8;k=1} while t>0{tm[k]=(48+(t%10)) as u8;t=t/10;k=k+1} let b:*u8=sys_mmap(24); var j:i64=0; while j<k{b[j]=tm[k-1-j];j=j+1} sys_write(1,b,k); return 0 } 9func g_due(last_run: i64, interval: i64, now: i64) -> i64 { if last_run == 0 { return 1 } if now >= last_run + interval { return 1 } return 0 } 10 11func main(argc: i64, argv: *i64) -> i64 { 12 gp("=== nx_dr_schedule_gate (schedule-due policy) ===\n" as *u8) 13 var pass: i64=0; var fail: i64=0 14 if g_due(1000,3600,5000)==1 { pass=pass+1; gp(" T1 elapsed 4000>=3600 -> DUE PASS\n" as *u8) } else { fail=fail+1; gp(" T1 FAIL\n" as *u8) } 15 if g_due(1000,3600,4000)==0 { pass=pass+1; gp(" T2 elapsed 3000<3600 -> waiting PASS\n" as *u8) } else { fail=fail+1; gp(" T2 FAIL\n" as *u8) } 16 if g_due(1000,3600,4600)==1 { pass=pass+1; gp(" T3 boundary 3600==3600 -> DUE PASS\n" as *u8) } else { fail=fail+1; gp(" T3 FAIL\n" as *u8) } 17 if g_due(0,3600,100)==1 { pass=pass+1; gp(" T4 never-run (last=0) -> DUE PASS\n" as *u8) } else { fail=fail+1; gp(" T4 FAIL\n" as *u8) } 18 if g_due(1000,3600,1000)==0 { pass=pass+1; gp(" T5 just-ran -> waiting PASS\n" as *u8) } else { fail=fail+1; gp(" T5 FAIL\n" as *u8) } 19 gp("RESULT pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail) 20 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 21 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 22 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 23 let ctr__dry: *i64 = gv_ctr() 24 ctr__dry[0] = pass 25 ctr__dry[1] = pass + fail 26 let rc__dry: i64 = gv_verdict("DR-SCHEDULE-GATE" as *u8, ctr__dry, "automated periodic backup decision)" as *u8) 27 sys_exit(rc__dry) 28 return rc__dry 29}