nx_toner_ledger_test.nx source
↩ module page · 41 lines · 1886 B
1// nx_toner_ledger_test.nx -- gate for real toner accounting. Unique exit codes per invariant:
2// 1x capacity: TN-630 = 1200*50000 = 60,000,000 ; TN-660 = 130,000,000
3// 2x fresh cartridge (consumed 0) -> 10000 bp (100.00%), 1200 pages left
4// 3x one ISO 5% page (50,000) -> 9991 bp, 1199 pages left, used 1 page
5// 4x half consumed (30,000,000) -> 5000 bp (50.00%), 600 pages left
6// 5x over-consumed clamp -> 0 bp, 0 pages
7// 6x add accumulates
8// expect_exit: 0 license_tier: ORIGINAL
9
10import "nx_syscalls.nx"
11import "nx_toner_ledger.nx"
12
13func t_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
14
15func main() -> i64 {
16 if nx_ledger_capacity(NX_TONER_YIELD_TN630) != 60000000 { return 1 }
17 if nx_ledger_capacity(NX_TONER_YIELD_TN660) != 130000000 { return 2 }
18
19 if nx_ledger_remaining_bp(NX_TONER_YIELD_TN630, 0) != 10000 { return 10 }
20 if nx_ledger_remaining_pages(NX_TONER_YIELD_TN630, 0) != 1200 { return 11 }
21
22 // one standard 5% page
23 if nx_ledger_remaining_bp(NX_TONER_YIELD_TN630, 50000) != 9991 { return 20 }
24 if nx_ledger_remaining_pages(NX_TONER_YIELD_TN630, 50000) != 1199 { return 21 }
25 if nx_ledger_used_pages(50000) != 1 { return 22 }
26
27 // half
28 if nx_ledger_remaining_bp(NX_TONER_YIELD_TN630, 30000000) != 5000 { return 30 }
29 if nx_ledger_remaining_pages(NX_TONER_YIELD_TN630, 30000000) != 600 { return 31 }
30
31 // over-consumed -> clamp
32 if nx_ledger_remaining_bp(NX_TONER_YIELD_TN630, 70000000) != 0 { return 40 }
33 if nx_ledger_remaining_pages(NX_TONER_YIELD_TN630, 70000000) != 0 { return 41 }
34
35 // accumulate
36 if nx_ledger_add(1000000, 50000) != 1050000 { return 50 }
37 if nx_ledger_add(0, 0) != 0 { return 51 }
38
39 t_puts("nx_toner_ledger: 6/6 KAT PASS (capacity + fresh + one-5%-page + half + over-clamp + accumulate)\n")
40 return 0
41}