code wiki / _hdl_build / nx_engineer_gate_runner_test.nx

nx_engineer_gate_runner_test.nx source

↩ module page · 52 lines · 2543 B

1// nx_engineer_gate_runner_test.nx -- prove the Engineer's full-pipeline gate 2// classifies honestly where the exit-code-only runner was blind. Corpus of three 3// gates with KNOWN distinct outcomes: a good test (PASS), the reserved-keyword source 4// (COMPILE-FAIL), and the null-write program (CRASH/SIGSEGV). The old runner would 5// link the empty .s and/or read exit-0 -- this names each correctly. 6// Known answer: PASS, COMPILE-FAIL, CRASH(11) -> exit 0. 7 8import "nx_engineer_gate_runner.nx" 9 10func gr_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 11func gr_num(v: i64) -> i64 { 12 let b: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 - m } 13 let t: *u8 = sys_mmap(28); var k: i64 = 0 14 if m == 0 { t[0] = 48; k = 1 } 15 while m > 0 { t[k] = 48 + (m % 10); m = m / 10; k = k + 1 } 16 var i: i64 = 0; while i < k { b[i] = t[k - 1 - i]; i = i + 1 } 17 sys_write(1, b, k); return 0 18} 19 20func main() -> i64 { 21 gr_puts("=== ENGINEER full-pipeline gate runner (compile/link/run, crash-aware) ===\n" as *u8) 22 let kg: *u8 = "_offc/nx_cc_known_good.elf" as *u8 23 let out: *i64 = sys_mmap(8) as *i64 24 25 let srcs: *i64 = sys_mmap(8 * 8) as *i64 26 let exps: *i64 = sys_mmap(8 * 8) as *i64 27 var n: i64 = 0 28 srcs[n] = ("runtime/_hdl_build/nx_u128_test.nx" as *u8) as i64; exps[n] = EGR_PASS; n = n + 1 29 srcs[n] = ("runtime/_hdl_build/nx_eng_badsrc.nx" as *u8) as i64; exps[n] = EGR_COMPILE_FAIL; n = n + 1 30 srcs[n] = ("runtime/_hdl_build/nx_eng_crasher.nx" as *u8) as i64; exps[n] = EGR_CRASH; n = n + 1 31 32 var correct: i64 = 0 33 var i: i64 = 0 34 while i < n { 35 let src: *u8 = srcs[i] as *u8 36 let v: i64 = eng_gate(kg, src, "/tmp/gr.s" as *u8, "/tmp/gr.elf" as *u8, "/tmp/gr.out" as *u8, out) 37 gr_puts(" " as *u8); gr_puts(egr_verdict_name(v)) 38 if v == EGR_CRASH { gr_puts(" (signal " as *u8); gr_num(out[0]); gr_puts(")" as *u8) } 39 if v == EGR_FAIL { gr_puts(" (exit " as *u8); gr_num(out[0]); gr_puts(")" as *u8) } 40 gr_puts(" <- " as *u8); gr_puts(src); gr_puts("\n" as *u8) 41 if v == exps[i] { correct = correct + 1 } 42 i = i + 1 43 } 44 45 gr_puts("----------------------------------------------------------------\n" as *u8) 46 gr_puts(" classified correctly " as *u8); gr_num(correct); gr_puts("/" as *u8); gr_num(n) 47 gr_puts(" -- a compile-fail or crash can no longer read as PASS.\n" as *u8) 48 49 if correct != n { sys_exit(1); return 1 } 50 sys_exit(0) 51 return 0 52}