mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
picohttpparser: add tests for u64toa (#20822)
This commit is contained in:
parent
09c35acb09
commit
53733bd93d
2 changed files with 69 additions and 0 deletions
65
vlib/picohttpparser/misc_test.v
Normal file
65
vlib/picohttpparser/misc_test.v
Normal file
|
@ -0,0 +1,65 @@
|
|||
module picohttpparser
|
||||
|
||||
// Test various values under 10,000
|
||||
pub fn test_u64toa_small_values() {
|
||||
for v in [u64(0), 1, 10, 99, 100, 999, 1000, 9999] {
|
||||
mut buf := [10]u8{}
|
||||
len := unsafe { u64toa(&buf[0], v) or { 0 } }
|
||||
|
||||
assert len == expected_len(v)
|
||||
|
||||
// Check the actual string for accuracy
|
||||
assert buf[0..len] == v.str().bytes()
|
||||
}
|
||||
}
|
||||
|
||||
// Test various values above 10,000 and error handling
|
||||
pub fn test_u64toa_large_values() {
|
||||
for i, v in [u64(10000), 12345, 99999, 100000, 999999, 12345678, 99_999_999, 100_000_000] {
|
||||
mut buf := [20]u8{}
|
||||
|
||||
len := unsafe {
|
||||
u64toa(&buf[0], v) or { assert err.msg() == 'Maximum size of 100MB exceeded!' }
|
||||
}
|
||||
|
||||
if v < 100_000_000 {
|
||||
assert len == expected_len(v)
|
||||
|
||||
assert buf[0..len] == v.str().bytes()
|
||||
} else {
|
||||
assert len == 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Test edge cases
|
||||
pub fn test_u64toa_edge_cases() {
|
||||
mut buf := [10]u8{}
|
||||
|
||||
// Test zero value
|
||||
len := unsafe {
|
||||
u64toa(&buf[0], 0) or { assert false }
|
||||
}
|
||||
|
||||
assert len == 1
|
||||
assert buf[0] == `0`
|
||||
}
|
||||
|
||||
// Helper functions for expected values
|
||||
fn expected_len(v u64) int {
|
||||
if v == 0 {
|
||||
return 1
|
||||
}
|
||||
|
||||
// return int(math.ceil(math.log10(f64(v + 1))))
|
||||
|
||||
mut count := 0
|
||||
mut temp := v
|
||||
|
||||
for temp > 0 {
|
||||
temp /= 10
|
||||
count++
|
||||
}
|
||||
|
||||
return count
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
module picohttpparser
|
||||
|
||||
#include <sys/socket.h>
|
||||
|
||||
pub struct Response {
|
||||
pub:
|
||||
fd int
|
||||
|
@ -105,6 +107,8 @@ pub fn (mut r Response) raw(response string) {
|
|||
r.write_string(response)
|
||||
}
|
||||
|
||||
fn C.send(sockfd int, buf voidptr, len usize, flags int) int
|
||||
|
||||
@[inline]
|
||||
pub fn (mut r Response) end() int {
|
||||
n := int(i64(r.buf) - i64(r.buf_start))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue