code wiki / (root) / nx_css_number_parse_test.nx

nx_css_number_parse_test.nx source

↩ module page · 97 lines · 3034 B

1// nx_css_number_parse_test.nx -- smoke for CSS number -> thousandths. 2// Verifies integer + fractional + boundary cases plus error paths. 3 4import "nx_syscalls.nx" 5import "nx_css_number_parse.nx" 6 7func _put_byte(buf: *u8, i: i64, v: i64) -> i64 { 8 buf[i] = v as u8 9 return 0 10} 11 12func _put_ascii(buf: *u8, off: i64, s: *u8, n: i64) -> i64 { 13 var i: i64 = 0 14 while i < n { 15 buf[off + i] = s[i] 16 i = i + 1 17 } 18 return 0 19} 20 21func main() -> i64 { 22 let src: *u8 = (sys_mmap(128)) as *u8 23 24 // "0" at offset 0 len 1 -> 0 25 _put_byte(src, 0, 48) 26 27 // "16" at offset 2 len 2 -> 16000 28 _put_byte(src, 2, 49) 29 _put_byte(src, 3, 54) 30 31 // "1.5" at offset 5 len 3 -> 1500 32 _put_byte(src, 5, 49) 33 _put_byte(src, 6, 46) 34 _put_byte(src, 7, 53) 35 36 // "0.25" at offset 9 len 4 -> 250 37 _put_byte(src, 9, 48) 38 _put_byte(src, 10, 46) 39 _put_byte(src, 11, 50) 40 _put_byte(src, 12, 53) 41 42 // "100" at offset 14 len 3 -> 100000 43 _put_byte(src, 14, 49) 44 _put_byte(src, 15, 48) 45 _put_byte(src, 16, 48) 46 47 // "1.234" at offset 18 len 5 -> 1234 48 _put_byte(src, 18, 49) 49 _put_byte(src, 19, 46) 50 _put_byte(src, 20, 50) 51 _put_byte(src, 21, 51) 52 _put_byte(src, 22, 52) 53 54 // "1.2345" at offset 24 len 6 -> 1234 (truncate past 3 decimals) 55 _put_byte(src, 24, 49) 56 _put_byte(src, 25, 46) 57 _put_byte(src, 26, 50) 58 _put_byte(src, 27, 51) 59 _put_byte(src, 28, 52) 60 _put_byte(src, 29, 53) 61 62 // ".5" at offset 31 len 2 -> ERROR (leading dot) 63 _put_byte(src, 31, 46) 64 _put_byte(src, 32, 53) 65 66 // "1." at offset 34 len 2 -> ERROR (trailing dot, no frac digits) 67 _put_byte(src, 34, 49) 68 _put_byte(src, 35, 46) 69 70 // "1.2.3" at offset 37 len 5 -> ERROR (multiple dots) 71 _put_byte(src, 37, 49) 72 _put_byte(src, 38, 46) 73 _put_byte(src, 39, 50) 74 _put_byte(src, 40, 46) 75 _put_byte(src, 41, 51) 76 77 // "a" at offset 43 len 1 -> ERROR (non-digit) 78 _put_byte(src, 43, 97) 79 80 // ---- positive cases ---- 81 if nx_css_number_parse(src, 0, 1) != 0 { return 1 } 82 if nx_css_number_parse(src, 2, 2) != 16000 { return 2 } 83 if nx_css_number_parse(src, 5, 3) != 1500 { return 3 } 84 if nx_css_number_parse(src, 9, 4) != 250 { return 4 } 85 if nx_css_number_parse(src, 14, 3) != 100000 { return 5 } 86 if nx_css_number_parse(src, 18, 5) != 1234 { return 6 } 87 if nx_css_number_parse(src, 24, 6) != 1234 { return 7 } // truncate past 3 decimals 88 89 // ---- error cases ---- 90 if nx_css_number_parse(src, 31, 2) != NX_CSS_NUMBER_PARSE_ERROR { return 10 } // ".5" 91 if nx_css_number_parse(src, 34, 2) != NX_CSS_NUMBER_PARSE_ERROR { return 11 } // "1." 92 if nx_css_number_parse(src, 37, 5) != NX_CSS_NUMBER_PARSE_ERROR { return 12 } // "1.2.3" 93 if nx_css_number_parse(src, 43, 1) != NX_CSS_NUMBER_PARSE_ERROR { return 13 } // "a" 94 if nx_css_number_parse(src, 0, 0) != NX_CSS_NUMBER_PARSE_ERROR { return 14 } // empty 95 96 return 0 97}