nx_css_color_decode_test.nx source
↩ module page · 91 lines · 3216 B
1// nx_css_color_decode_test.nx -- smoke for CSS hex color decoder.
2// Verifies all four supported hex shapes (3/4/6/8 chars) plus
3// case-insensitivity and error-on-bad-length / error-on-bad-digit.
4
5import "nx_syscalls.nx"
6import "nx_css_color_decode.nx"
7
8func _put_byte(buf: *u8, i: i64, v: i64) -> i64 {
9 buf[i] = v as u8
10 return 0
11}
12
13func main() -> i64 {
14 let src: *u8 = (sys_mmap(64)) as *u8
15 let out: *CssColor = (sys_mmap(NX_CSS_COLOR_BYTES as nx_size)) as *CssColor
16
17 // [0..2] "abc" -- 3-char form: #aabbcc
18 _put_byte(src, 0, 97) // 'a'
19 _put_byte(src, 1, 98) // 'b'
20 _put_byte(src, 2, 99) // 'c'
21
22 // [3..6] "F00A" -- 4-char form upper-case: #FF0000AA
23 _put_byte(src, 3, 70) // 'F'
24 _put_byte(src, 4, 48) // '0'
25 _put_byte(src, 5, 48) // '0'
26 _put_byte(src, 6, 65) // 'A'
27
28 // [7..12] "ff0080" -- 6-char form: #ff0080
29 _put_byte(src, 7, 102)
30 _put_byte(src, 8, 102)
31 _put_byte(src, 9, 48)
32 _put_byte(src, 10, 48)
33 _put_byte(src, 11, 56) // '8'
34 _put_byte(src, 12, 48)
35
36 // [13..20] "1A2B3C40" -- 8-char form mixed case: #1A2B3C40
37 _put_byte(src, 13, 49) // '1'
38 _put_byte(src, 14, 65) // 'A'
39 _put_byte(src, 15, 50) // '2'
40 _put_byte(src, 16, 66) // 'B'
41 _put_byte(src, 17, 51) // '3'
42 _put_byte(src, 18, 67) // 'C'
43 _put_byte(src, 19, 52) // '4'
44 _put_byte(src, 20, 48) // '0'
45
46 // [21..22] "1z" -- bad digit (z is not hex)
47 _put_byte(src, 21, 49) // '1'
48 _put_byte(src, 22, 122) // 'z'
49
50 // ---- 3-char "abc" -> 0xaa 0xbb 0xcc + opaque ----
51 if nx_css_color_decode(src, 0, 3, out) != 1 { return 1 }
52 if out.r != 170 { return 2 } // 0xaa
53 if out.g != 187 { return 3 } // 0xbb
54 if out.b != 204 { return 4 } // 0xcc
55 if out.a != 255 { return 5 }
56
57 // ---- 4-char "F00A" -> 0xff 0x00 0x00 0xaa ----
58 if nx_css_color_decode(src, 3, 4, out) != 1 { return 10 }
59 if out.r != 255 { return 11 }
60 if out.g != 0 { return 12 }
61 if out.b != 0 { return 13 }
62 if out.a != 170 { return 14 }
63
64 // ---- 6-char "ff0080" -> 0xff 0x00 0x80 + opaque ----
65 if nx_css_color_decode(src, 7, 6, out) != 1 { return 20 }
66 if out.r != 255 { return 21 }
67 if out.g != 0 { return 22 }
68 if out.b != 128 { return 23 } // 0x80
69 if out.a != 255 { return 24 }
70
71 // ---- 8-char "1A2B3C40" -> 0x1a 0x2b 0x3c 0x40 ----
72 if nx_css_color_decode(src, 13, 8, out) != 1 { return 30 }
73 if out.r != 26 { return 31 } // 0x1a
74 if out.g != 43 { return 32 } // 0x2b
75 if out.b != 60 { return 33 } // 0x3c
76 if out.a != 64 { return 34 } // 0x40
77
78 // ---- bad length (2-char hex is invalid) -> fail ----
79 if nx_css_color_decode(src, 0, 2, out) != 0 { return 40 }
80
81 // ---- bad length (5-char hex is invalid) -> fail ----
82 if nx_css_color_decode(src, 7, 5, out) != 0 { return 41 }
83
84 // ---- bad length (7-char hex is invalid) -> fail ----
85 if nx_css_color_decode(src, 13, 7, out) != 0 { return 42 }
86
87 // ---- bad digit at hex_len=3 -> fail ----
88 if nx_css_color_decode(src, 21, 3, out) != 0 { return 50 }
89
90 return 0
91}