code wiki / (root) / nx_pm_dashboard_gate.nx

nx_pm_dashboard_gate.nx source

↩ module page · 59 lines · 2790 B

1// nx_pm_dashboard_gate.nx -- KAT for the PM ROI rollup, incl. the LIAR-KILLER invariant: 2// a fabricated (UNMEASURED) or sourceless number is EXCLUDED from every grounded total. 3// exit 0 = pass, N = assertion N failed. 4import "nx_syscalls.nx" 5import "nx_pm_dashboard.nx" 6 7func g_cat(d: *u8, o: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { d[o] = s[i]; o = o + 1; i = i + 1 } return o } 8func g_tab(d: *u8, o: i64) -> i64 { d[o] = 9 as u8; return o + 1 } 9func g_nl(d: *u8, o: i64) -> i64 { d[o] = 10 as u8; return o + 1 } 10// one full row: layer cat cap metric value unit basis source (source empty if src==0) 11func g_row(d: *u8, o: i64, cat: *u8, cap: *u8, val: *u8, basis: *u8, src: *u8, has_src: i64) -> i64 { 12 o = g_cat(d, o, "EXEC" as *u8); o = g_tab(d, o) 13 o = g_cat(d, o, cat); o = g_tab(d, o) 14 o = g_cat(d, o, cap); o = g_tab(d, o) 15 o = g_cat(d, o, "metric" as *u8); o = g_tab(d, o) 16 o = g_cat(d, o, val); o = g_tab(d, o) 17 o = g_cat(d, o, "unit" as *u8); o = g_tab(d, o) 18 o = g_cat(d, o, basis); o = g_tab(d, o) 19 if has_src == 1 { o = g_cat(d, o, src) } 20 o = g_nl(d, o) 21 return o 22} 23 24func main() -> i64 { 25 let d: *u8 = sys_mmap(1024) 26 var o: i64 = 0 27 o = g_cat(d, o, "# comment line must be ignored\n" as *u8) 28 o = g_row(d, o, "MONEY" as *u8, "capA" as *u8, "100" as *u8, "MEASURED" as *u8, "src" as *u8, 1) 29 o = g_row(d, o, "MONEY" as *u8, "capB" as *u8, "200" as *u8, "ESTIMATED" as *u8, "src" as *u8, 1) 30 o = g_row(d, o, "MONEY" as *u8, "capC" as *u8, "999" as *u8, "UNMEASURED" as *u8, "src" as *u8, 1) 31 o = g_row(d, o, "MONEY" as *u8, "capD" as *u8, "888" as *u8, "ESTIMATED" as *u8, "x" as *u8, 0) 32 o = g_row(d, o, "TIME" as *u8, "capE" as *u8, "50" as *u8, "MEASURED" as *u8, "src" as *u8, 1) 33 34 let out: *i64 = sys_mmap(16 * 8) as *i64 35 pd_rollup(d, o, out) 36 37 // 1: measured money = 100 only (the fabricated 999 + sourceless 888 do NOT enter it) 38 if out[0] != 100 { return 1 } 39 // 2: estimated money = 200 (capB, cited) 40 if out[1] != 200 { return 2 } 41 // 3: UNMEASURED money is tracked separately, never summed into grounded 42 if out[2] != 999 { return 3 } 43 // 4: sourceless money excluded into its own bucket 44 if out[3] != 888 { return 4 } 45 // 5: measured time = 50 46 if out[4] != 50 { return 5 } 47 // 6: grounded lines = 3 (capA, capB, capE) -- capC + capD excluded 48 if out[9] != 3 { return 6 } 49 // 7: unmeasured lines = 1 (capC) 50 if out[10] != 1 { return 7 } 51 // 8: sourceless lines = 1 (capD) 52 if out[11] != 1 { return 8 } 53 // 9: total lines = 5 (comment ignored) 54 if out[8] != 5 { return 9 } 55 // 10: THE LIAR-KILLER -- grounded money (measured+estimated) = 300, NOT 300+999+888 56 if out[0] + out[1] != 300 { return 10 } 57 58 return 0 59}