code wiki / (root) / nx_css_color_decode_test.nx

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}