code wiki / _hdl_build / nx_adnet_bill_gate.nx

nx_adnet_bill_gate.nx source

↩ module page · 111 lines · 5082 B

1// nx_adnet_bill_gate.nx -- GATE for CPM/CPC billing math (nx_adnet_bill). Proves exact integer math, 2// the HONEST-BILLING refusals (missing rate / negative count -> REFUSED, never a fabricated charge), 3// the no-charge-by-default zero case, the budgetable flat ceiling, per-AD log counting, and that the 4// refusal is LOAD-BEARING through the invoice line (negative control). expect_exit: 0 5// license_tier: ORIGINAL 6import "nx_syscalls.nx" 7import "_hdl_build/nx_adnet_bill.nx" 8import "nx_gate_verdict.nx" 9 10func bg_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 bg_putn(v: i64) -> i64 { var m: i64 = v; if m < 0 { bg_puts("-" as *u8); m = 0 - m } let t: *u8 = sys_mmap(24); 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 } let o: *u8 = sys_mmap(24); var i: i64 = 0; while i < k { o[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, o, k); return 0 } 12func bg_cat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64 = off; var i: i64 = 0; while s[i] != (0 as u8) { dst[o] = s[i]; o = o + 1; i = i + 1 } return o } 13 14func bg_has(hay: *u8, n: i64, needle: *u8) -> i64 { 15 var nl: i64 = 0 16 while needle[nl] != (0 as u8) { nl = nl + 1 } 17 if nl == 0 { return 0 } 18 var i: i64 = 0 19 while i + nl <= n { 20 var j: i64 = 0 21 var eq: i64 = 1 22 while j < nl { if hay[i + j] != needle[j] { eq = 0; break } j = j + 1 } 23 if eq == 1 { return 1 } 24 i = i + 1 25 } 26 return 0 27} 28 29func main() -> i64 { 30 bg_puts("=== nx_adnet_bill_gate ===\n" as *u8) 31 var pass: i64 = 0 32 var fail: i64 = 0 33 34 // T1 exact integer math 35 let t1: i64 = anb_total_milli(12345, 7, 2000, 250) 36 if t1 == 26440 { pass = pass + 1 } else { fail = fail + 1; bg_puts("T1 FAIL math\n" as *u8) } 37 38 // T2 refusals (missing rate / negative count) 39 var t2: i64 = 1 40 if anb_total_milli(100, 5, 0 - 1, 250) != (0 - 1) { t2 = 0 } 41 if anb_total_milli(100, 5, 2000, 0 - 1) != (0 - 1) { t2 = 0 } 42 if anb_total_milli(0 - 1, 5, 2000, 250) != (0 - 1) { t2 = 0 } 43 if t2 == 1 { pass = pass + 1 } else { fail = fail + 1; bg_puts("T2 FAIL refusals\n" as *u8) } 44 45 // T3 zero counts -> zero due (no-charge default) 46 let t3: i64 = anb_total_milli(0, 0, 2000, 250) 47 if t3 == 0 { pass = pass + 1 } else { fail = fail + 1; bg_puts("T3 FAIL zero default\n" as *u8) } 48 49 // T4 budgetable ceiling 50 var t4: i64 = 1 51 if anb_capped(26440, 20000) != 20000 { t4 = 0 } 52 if anb_capped(26440, 0 - 1) != 26440 { t4 = 0 } 53 if anb_capped(0 - 1, 100) != (0 - 1) { t4 = 0 } 54 if t4 == 1 { pass = pass + 1 } else { fail = fail + 1; bg_puts("T4 FAIL ceiling\n" as *u8) } 55 56 // T5 per-AD log counting 57 let logb: *u8 = sys_mmap(256) 58 var ln: i64 = 0 59 ln = bg_cat(logb, ln, "h1" as *u8) 60 logb[ln] = 10 as u8 61 ln = ln + 1 62 ln = bg_cat(logb, ln, "h1" as *u8) 63 logb[ln] = 10 as u8 64 ln = ln + 1 65 ln = bg_cat(logb, ln, "h2" as *u8) 66 logb[ln] = 10 as u8 67 ln = ln + 1 68 ln = bg_cat(logb, ln, "h1" as *u8) 69 logb[ln] = 10 as u8 70 ln = ln + 1 71 var t5: i64 = 1 72 if anb_count(logb, ln, "h1" as *u8) != 3 { t5 = 0 } 73 if anb_count(logb, ln, "h2" as *u8) != 1 { t5 = 0 } 74 if anb_count(logb, ln, "zz" as *u8) != 0 { t5 = 0 } 75 if t5 == 1 { pass = pass + 1 } else { fail = fail + 1; bg_puts("T5 FAIL log counts\n" as *u8) } 76 77 // T6 invoice line + LOAD-BEARING refusal (negative control) 78 let line: *u8 = sys_mmap(512) 79 let w1: i64 = anb_invoice_line("h1" as *u8, 3, 1, 2000, 250, 0 - 1, line, 512) 80 var t6: i64 = 1 81 if w1 <= 0 { t6 = 0 } 82 if bg_has(line, w1, "id=h1 imps=3 clicks=1 due_milli=256" as *u8) == 0 { t6 = 0 } 83 let w2: i64 = anb_invoice_line("h1" as *u8, 3, 1, 0 - 1, 250, 0 - 1, line, 512) 84 if w2 <= 0 { t6 = 0 } 85 if bg_has(line, w2, "due_milli=REFUSED" as *u8) == 0 { t6 = 0 } 86 if t6 == 1 { pass = pass + 1 } else { fail = fail + 1; bg_puts("T6 FAIL invoice line\n" as *u8) } 87 88 bg_puts("pass=" as *u8) 89 bg_putn(pass) 90 bg_puts(" fail=" as *u8) 91 bg_putn(fail) 92 bg_puts("\n" as *u8) 93 94 let log2: *u8 = sys_mmap(256) 95 var lo: i64 = 0 96 if fail == 0 { lo = bg_cat(log2, lo, "ADNETBILL authored=organ verdict=GREEN" as *u8) } else { lo = bg_cat(log2, lo, "ADNETBILL authored=organ verdict=RED" as *u8) } 97 log2[lo] = 10 as u8 98 lo = lo + 1 99 let fd: i64 = sys_openat_wr("knowledge/status/adnet_bill.log" as *u8, 0x1A4) 100 if fd >= 0 { sys_write(fd, log2, lo); sys_close(fd) } 101 102 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 103 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 104 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 105 let ctr__dry: *i64 = gv_ctr() 106 ctr__dry[0] = pass 107 ctr__dry[1] = pass + fail 108 let rc__dry: i64 = gv_verdict("ADNET-BILL-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 109 sys_exit(rc__dry) 110 return rc__dry 111}