Fast decimal formatting for signed and unsigned integers
moon add justjavac/itoa///|
test "format signed and unsigned values" {
let buffer = @itoa.Buffer::new()
inspect(buffer.format_i32(-42), content="-42")
inspect(
buffer.format_u64(18446744073709551615UL),
content="18446744073709551615",
)
}///|
test "reuse the same buffer" {
let buffer = @itoa.Buffer::new()
inspect(buffer.format_u32(7U), content="7")
inspect(buffer.format_i64(-9000000000000L), content="-9000000000000")
}///|
test "split a large unsigned integer" {
let (quot, rem) = @itoa.udivmod_1e19(18446744073709551615UL)
inspect(quot, content="1")
inspect(rem, content="8446744073709551615")
}pub struct Buffer {
bytes : FixedArray[Byte]
}test "buffer can be reused" {
let buffer = Buffer::new()
inspect(buffer.format_i32(-42), content="-42")
inspect(buffer.format_u64(9000UL), content="9000")
}test "format signed 32-bit value" {
let buffer = Buffer::new()
inspect(buffer.format_i32(-2147483648), content="-2147483648")
}test "format signed 64-bit value" {
let buffer = Buffer::new()
inspect(
buffer.format_i64(-1234567890123456789L),
content="-1234567890123456789",
)
}test "format unsigned 32-bit value" {
let buffer = Buffer::new()
inspect(buffer.format_u32(4294967295U), content="4294967295")
}test "format unsigned 64-bit value" {
let buffer = Buffer::new()
inspect(
buffer.format_u64(18446744073709551615UL),
content="18446744073709551615",
)
}test "create buffer" {
let buffer = Buffer::new()
inspect(buffer.format_u32(7U), content="7")
}fn udivmod_1e19(n : UInt64) -> (UInt64, UInt64)test "split by 1e19" {
let (quot, rem) = udivmod_1e19(18446744073709551615UL)
inspect(quot, content="1")
inspect(rem, content="8446744073709551615")
}Fast decimal formatting for signed and unsigned integers