v / vlib / picohttpparser / misc_test.v
71 lines · 56 sloc · 1.22 KB · 62bdf990d03b069db82d75b35b547f9191942134
Raw
1module picohttpparser
2
3// Test various values under 10,000
4pub fn test_u64toa_small_values() {
5 for v in [u64(0), 1, 10, 99, 100, 999, 1000, 9999] {
6 mut buf := [10]u8{}
7 len := unsafe { u64toa(&buf[0], v) or { 0 } }
8
9 assert len == expected_len(v)
10
11 // Check the actual string for accuracy
12 assert buf[0..len] == v.str().bytes()
13 }
14}
15
16// Test various values above 10,000 and error handling
17pub fn test_u64toa_large_values() {
18 for i, v in [u64(10000), 12345, 99999, 100000, 999999, 12345678, 99_999_999, 100_000_000] {
19 mut buf := [20]u8{}
20
21 len := unsafe {
22 u64toa(&buf[0], v) or {
23 assert err.msg() == 'Maximum size of 100MB exceeded!'
24 0
25 }
26 }
27
28 if v < 100_000_000 {
29 assert len == expected_len(v)
30
31 assert buf[0..len] == v.str().bytes()
32 } else {
33 assert len == 0
34 }
35 }
36}
37
38// Test edge cases
39pub fn test_u64toa_edge_cases() {
40 mut buf := [10]u8{}
41
42 // Test zero value
43 len := unsafe {
44 u64toa(&buf[0], 0) or {
45 assert false
46 0
47 }
48 }
49
50 assert len == 1
51 assert buf[0] == `0`
52}
53
54// Helper functions for expected values
55fn expected_len(v u64) int {
56 if v == 0 {
57 return 1
58 }
59
60 // return int(math.ceil(math.log10(f64(v + 1))))
61
62 mut count := 0
63 mut temp := v
64
65 for temp > 0 {
66 temp /= 10
67 count++
68 }
69
70 return count
71}
72