nx_img_adapt_gate.nx source
↩ module page · 71 lines · 2513 B
1// nx_img_adapt_gate.nx -- unit-tests channel adaptation (nx_img_to_rgb) for
2// every PNG channel count, plus an RGB regression through the unified converter.
3// (Self-encoding gray/RGBA PNGs isn't possible -- nx_png_write is RGB-only --
4// so the adapter is proven directly; the PNG branch wires it.)
5
6import "nx_syscalls.nx"
7import "nx_img_resample.nx"
8import "nx_png_decoder.nx"
9import "nx_seg_store.nx"
10import "nx_media_convert.nx"
11
12func main() -> i64 {
13 // nc=1 gray [50,200] -> [50,50,50, 200,200,200]
14 let g1: *u8 = sys_mmap(16)
15 g1[0] = 50 as u8
16 g1[1] = 200 as u8
17 let o1: *u8 = sys_mmap(16)
18 if nx_img_to_rgb(g1, 2, 1, 1, o1) != 0 { return 1 }
19 if o1[0] != (50 as u8) { return 2 }
20 if o1[2] != (50 as u8) { return 3 }
21 if o1[3] != (200 as u8) { return 4 }
22 if o1[5] != (200 as u8) { return 5 }
23
24 // nc=2 gray+alpha [50,99, 200,88] -> [50,50,50, 200,200,200] (alpha dropped)
25 let g2: *u8 = sys_mmap(16)
26 g2[0] = 50 as u8
27 g2[1] = 99 as u8
28 g2[2] = 200 as u8
29 g2[3] = 88 as u8
30 let o2: *u8 = sys_mmap(16)
31 if nx_img_to_rgb(g2, 2, 1, 2, o2) != 0 { return 6 }
32 if o2[0] != (50 as u8) { return 7 }
33 if o2[2] != (50 as u8) { return 8 }
34 if o2[3] != (200 as u8) { return 9 }
35 if o2[5] != (200 as u8) { return 10 }
36
37 // nc=4 RGBA [10,20,30,255, 40,50,60,128] -> [10,20,30, 40,50,60]
38 let g4: *u8 = sys_mmap(16)
39 g4[0] = 10 as u8
40 g4[1] = 20 as u8
41 g4[2] = 30 as u8
42 g4[3] = 255 as u8
43 g4[4] = 40 as u8
44 g4[5] = 50 as u8
45 g4[6] = 60 as u8
46 g4[7] = 128 as u8
47 let o4: *u8 = sys_mmap(16)
48 if nx_img_to_rgb(g4, 2, 1, 4, o4) != 0 { return 11 }
49 if o4[0] != (10 as u8) { return 12 }
50 if o4[1] != (20 as u8) { return 13 }
51 if o4[2] != (30 as u8) { return 14 }
52 if o4[3] != (40 as u8) { return 15 }
53 if o4[4] != (50 as u8) { return 16 }
54 if o4[5] != (60 as u8) { return 17 }
55
56 // nc=3 RGB passthrough
57 let g3: *u8 = sys_mmap(16)
58 g3[0] = 10 as u8
59 g3[1] = 20 as u8
60 g3[2] = 30 as u8
61 let o3: *u8 = sys_mmap(16)
62 if nx_img_to_rgb(g3, 1, 1, 3, o3) != 0 { return 18 }
63 if o3[0] != (10 as u8) { return 19 }
64 if o3[1] != (20 as u8) { return 20 }
65 if o3[2] != (30 as u8) { return 21 }
66
67 // regression: unified converter on a real RGB PNG still works end-to-end
68 if nx_media_convert_file("/mnt/c/Users/elder/nishi-core/nxc2/_sv_mc_src.png" as *u8, NX_RS_BILINEAR, 32, 32, "/mnt/c/Users/elder/nishi-core/nxc2/_sv_adapt_out.png" as *u8) != 0 { return 22 }
69
70 return 0
71}