code wiki / (root) / nx_toner_ledger_test.nx

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}