code wiki / _hdl_build / nx_fin_member_gate.nx
nx_fin_member_gate.nx source
↩ module page · 52 lines · 2682 B
1// nx_fin_member_gate.nx -- proves Nishi Finance is registered in THE NISHI BUILDER: the finance domain has
2// >= 4 entries, the member card + dashboard resolve, every finance template is sovereignty-safe, and a
3// bogus id does NOT resolve (negative control). Read-only over the live builder catalog (run after
4// nx_fin_member). Exits 0 iff ALL pass. license_tier: ORIGINAL
5import "nx_syscalls.nx"
6import "nx_g_puts_lib.nx"
7import "nx_nishi_builder.nx"
8
9func g_putn(v: i64) -> i64 {
10 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
11 var m: i64 = v; if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
12 let d: *u8 = sys_mmap(24); var k: i64 = 0
13 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
14 var j: i64 = k - 1
15 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 }
16 return 0
17}
18func chk(name: *u8, got: i64, want: i64, st: *i64) -> i64 {
19 if got == want { st[0] = st[0] + 1; g_puts(" PASS "); g_puts(name); g_puts("\n") }
20 else { st[1] = st[1] + 1; g_puts(" FAIL "); g_puts(name); g_puts(" got="); g_putn(got); g_puts(" want="); g_putn(want); g_puts("\n") }
21 return 0
22}
23
24func main() -> i64 {
25 let st: *i64 = sys_mmap(16) as *i64
26 st[0] = 0; st[1] = 0
27 let path: *u8 = NB_PATH
28 let tpl: *u8 = sys_mmap(8192)
29
30 var c: i64 = nb_count(path, "finance\x00" as *u8, "*\x00" as *u8)
31 g_puts(" [info] finance domain entries="); g_putn(c); g_puts("\n")
32 var cok: i64 = 0
33 if c >= 4 { cok = 1 }
34 chk("finance domain has >= 4 entries", cok, 1, st)
35
36 chk("member card 'nishi-finance' resolves", nb_lookup(path, "finance\x00" as *u8, "member\x00" as *u8, "nishi-finance\x00" as *u8, tpl), 1, st)
37 chk("member template is sovereignty-safe", nb_template_safe(tpl), 1, st)
38
39 chk("dashboard 'main' resolves", nb_lookup(path, "finance\x00" as *u8, "dashboard\x00" as *u8, "main\x00" as *u8, tpl), 1, st)
40 chk("dashboard template is sovereignty-safe", nb_template_safe(tpl), 1, st)
41
42 chk("debt-plan resolves", nb_lookup(path, "finance\x00" as *u8, "debt-plan\x00" as *u8, "avalanche-snowball\x00" as *u8, tpl), 1, st)
43 chk("ledger net-worth resolves", nb_lookup(path, "finance\x00" as *u8, "ledger\x00" as *u8, "net-worth\x00" as *u8, tpl), 1, st)
44
45 // negative control: a bogus id must NOT resolve
46 chk("bogus finance id does NOT resolve", nb_lookup(path, "finance\x00" as *u8, "dashboard\x00" as *u8, "does-not-exist\x00" as *u8, tpl), 0, st)
47
48 g_puts("nx_fin_member_gate: PASS="); g_putn(st[0]); g_puts(" FAIL="); g_putn(st[1]); g_puts("\n")
49 if st[1] == 0 { g_puts("NISHI FINANCE MEMBER: GREEN\n"); return 0 }
50 g_puts("NISHI FINANCE MEMBER: RED\n")
51 return 1
52}