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}