code wiki / _hdl_build / nx_genealogist_test.nx
nx_genealogist_test.nx source
↩ module page · 47 lines · 2506 B
1// nx_genealogist_test.nx -- ACCEPTANCE GATE for the GENEALOGIST role (DEDUP: don't rebuild what exists;
2// supersede only on a better score). Was untested -- now Engineer-verifiable.
3import "nx_genealogist.nx"
4import "nx_syscalls.nx"
5import "nx_gate_verdict.nx"
6
7func gt_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
8func gt_putn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m} 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(1,bb,k); return 0 }
9
10func main() -> i64 {
11 var pass: i64 = 0
12 var total: i64 = 0
13
14 let reg_art: *i64 = sys_mmap(128) as *i64
15 let reg_obj: *i64 = sys_mmap(128) as *i64
16 var n: i64 = 0
17 // register a SEARCH engine for the GENERIC object
18 n = gen_register(ART_SEARCH, OBJ_GENERIC, reg_art, reg_obj, n)
19
20 // T1: a duplicate (same art+obj) is detected -> NOT clear to build
21 total = total + 1
22 var t1: i64 = 1
23 if gen_is_duplicate(ART_SEARCH, OBJ_GENERIC, reg_art, reg_obj, n) != 1 { t1 = 0 }
24 if gen_clear_to_build(ART_SEARCH, OBJ_GENERIC, reg_art, reg_obj, n) != 0 { t1 = 0 } // dup -> don't rebuild
25 if t1 == 1 { pass = pass + 1 } else { gt_puts("T1 FAIL dup\n" as *u8) }
26
27 // T2: a NOVEL art/obj is clear to build
28 total = total + 1
29 var t2: i64 = 1
30 if gen_is_duplicate(ART_KERNEL, OBJ_ENERGY, reg_art, reg_obj, n) != 0 { t2 = 0 }
31 if gen_clear_to_build(ART_KERNEL, OBJ_ENERGY, reg_art, reg_obj, n) != 1 { t2 = 0 }
32 if t2 == 1 { pass = pass + 1 } else { gt_puts("T2 FAIL novel\n" as *u8) }
33
34 // T3: supersede only on a strictly BETTER score for the same art+obj
35 total = total + 1
36 var t3: i64 = 1
37 if gen_supersedes(ART_SEARCH, OBJ_GENERIC, 90, ART_SEARCH, OBJ_GENERIC, 70) != 1 { t3 = 0 } // better -> supersede
38 if gen_supersedes(ART_SEARCH, OBJ_GENERIC, 60, ART_SEARCH, OBJ_GENERIC, 70) != 0 { t3 = 0 } // worse -> keep old
39 if t3 == 1 { pass = pass + 1 } else { gt_puts("T3 FAIL supersede\n" as *u8) }
40
41 gt_puts("GENEALOGIST " as *u8); gt_putn(pass); gt_puts("/" as *u8); gt_putn(total); gt_puts("\n" as *u8)
42 if pass == total { gt_puts("GENEALOGIST ALL-PASS\n" as *u8) }
43 let ctr: *i64 = gv_ctr()
44 ctr[0] = pass
45 ctr[1] = total
46 return gv_verdict("GENEALOGIST-GATE" as *u8, ctr, "dedup acceptance: duplicate refused, novel cleared, supersede only on strictly better score" as *u8)
47}