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}