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}