code wiki / (root) / nx_toner_meter_test.nx

nx_toner_meter_test.nx source

↩ module page · 45 lines · 1550 B

1// nx_toner_meter_test.nx -- gate for the real-coverage toner meter. Unique exit codes per invariant: 2// 1x blank (all white) -> 0 ppm 3// 2x solid black -> 1,000,000 ppm 4// 3x mid gray 0x80 -> 498039 ppm (127/255) 5// 4x 5% page (5 of 100 px black) -> 50,000 ppm = exactly one ISO standard page 6// 5x std-pages conversion: 50,000 ppm -> 1000 milli-std-pages 7// expect_exit: 0 license_tier: ORIGINAL 8 9import "nx_syscalls.nx" 10import "nx_toner_meter.nx" 11 12func 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 } 13 14func main() -> i64 { 15 let bm: *u8 = sys_mmap(256) 16 17 // all white 18 var i: i64 = 0 19 while i < 100 { bm[i] = 255 as u8; i = i + 1 } 20 if nx_toner_coverage_ppm(bm, 100) != 0 { return 1 } 21 22 // all black 23 i = 0 24 while i < 100 { bm[i] = 0 as u8; i = i + 1 } 25 if nx_toner_coverage_ppm(bm, 100) != 1000000 { return 2 } 26 27 // mid gray 0x80 28 i = 0 29 while i < 100 { bm[i] = 0x80 as u8; i = i + 1 } 30 if nx_toner_coverage_ppm(bm, 100) != 498039 { return 3 } 31 32 // 5% page: 5 black, 95 white 33 i = 0 34 while i < 100 { bm[i] = 255 as u8; i = i + 1 } 35 i = 0 36 while i < 5 { bm[i] = 0 as u8; i = i + 1 } 37 if nx_toner_coverage_ppm(bm, 100) != 50000 { return 4 } 38 39 // conversion 40 if nx_toner_std_pages_milli(50000) != 1000 { return 5 } 41 if nx_toner_std_pages_milli(25000) != 500 { return 6 } 42 43 t_puts("nx_toner_meter: 5/5 KAT PASS (white=0 black=1e6 gray=498039 5%page=50000ppm + std-page conv)\n") 44 return 0 45}