[ox/std] Fix writeItoa to work with max length 64 bit ints
All checks were successful
Build / build (push) Successful in 1m8s

This commit is contained in:
2026-01-21 23:28:13 -06:00
parent 689da4a019
commit 592e641ba9
2 changed files with 15 additions and 2 deletions

View File

@@ -33,9 +33,9 @@ constexpr ox::Error writeItoa(Integer v, ox::Writer_c auto &writer) noexcept {
mod /= base; mod /= base;
if (it || digit) { if (it || digit) {
ox::ResizedInt_t<Integer, 64> start = '0'; ox::ResizedInt_t<Integer, 64> start = '0';
if (digit >= 10) { if (digit >= 10) [[unlikely]] {
start = 'a';
digit -= 10; digit -= 10;
OX_RETURN_ERROR(writer.put('1'));
} }
OX_RETURN_ERROR(writer.put(static_cast<char>(start + digit))); OX_RETURN_ERROR(writer.put(static_cast<char>(start + digit)));
++it; ++it;

View File

@@ -539,6 +539,19 @@ OX_CLANG_NOWARN_END
{ {
"intToStr", "intToStr",
[] { [] {
oxExpect(ox::intToStr(static_cast<int8_t>(127)), "127");
oxExpect(ox::intToStr(static_cast<int8_t>(-128)), "-128");
oxExpect(ox::intToStr(static_cast<uint8_t>(255)), "255");
oxExpect(ox::intToStr(static_cast<uint16_t>(65535)), "65535");
oxExpect(ox::intToStr(static_cast<int16_t>(32767)), "32767");
oxExpect(ox::intToStr(static_cast<int16_t>(-32768)), "-32768");
oxExpect(ox::intToStr(static_cast<uint32_t>(4294967295)), "4294967295");
oxExpect(ox::intToStr(static_cast<int32_t>(2147483647)), "2147483647");
oxExpect(ox::intToStr(static_cast<int32_t>(-2147483648)), "-2147483648");
oxExpect(ox::intToStr(static_cast<uint64_t>(18446744073709551615u)), "18446744073709551615");
oxExpect(ox::intToStr(static_cast<int64_t>(9223372036854775807)), "9223372036854775807");
oxExpect(ox::intToStr(static_cast<int64_t>(-9223372036854775807)), "-9223372036854775807");
oxExpect(ox::intToStr(0), "0");
oxExpect(ox::intToStr(5), "5"); oxExpect(ox::intToStr(5), "5");
oxExpect(ox::intToStr(5000), "5000"); oxExpect(ox::intToStr(5000), "5000");
oxExpect(ox::intToStr(50000), "50000"); oxExpect(ox::intToStr(50000), "50000");