blob: 16677eee732eaae0bccc7c6c45d2aa6933ab242e [file]
//===-- Unittests for IntegerToString -------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "src/__support/CPP/limits.h"
#include "src/__support/CPP/span.h"
#include "src/__support/CPP/string_view.h"
#include "src/__support/big_int.h"
#include "src/__support/integer_literals.h"
#include "src/__support/integer_to_string.h"
#include "src/__support/macros/properties/types.h"
#include "src/__support/uint128.h"
#include "test/UnitTest/CharLiteralUtils.h"
#include "test/UnitTest/Test.h"
using LIBC_NAMESPACE::BigInt;
using LIBC_NAMESPACE::IntegerToString;
using LIBC_NAMESPACE::cpp::basic_string_view;
using LIBC_NAMESPACE::cpp::span;
using LIBC_NAMESPACE::radix::Bin;
using LIBC_NAMESPACE::radix::Custom;
using LIBC_NAMESPACE::radix::Dec;
using LIBC_NAMESPACE::radix::Hex;
using LIBC_NAMESPACE::radix::Oct;
using LIBC_NAMESPACE::operator""_u128;
using LIBC_NAMESPACE::operator""_u256;
#define EXPECT(type, value, string_value) \
{ \
const type buffer(value); \
decltype(buffer.view()) expected = string_value; \
EXPECT_EQ(buffer.view(), expected); \
}
#if defined(LIBC_TYPES_WCHAR_T_IS_UTF32)
using TestCharTypes = LIBC_NAMESPACE::testing::TypeList<char, wchar_t>;
#else
using TestCharTypes = LIBC_NAMESPACE::testing::TypeList<char>;
#endif
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT8, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<uint8_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, UINT8_MAX, ENCODED(CharT, "255"));
EXPECT(type, static_cast<uint8_t>(-1), ENCODED(CharT, "255"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, INT8, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<int8_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, -12, ENCODED(CharT, "-12"));
EXPECT(type, -123, ENCODED(CharT, "-123"));
EXPECT(type, INT8_MAX, ENCODED(CharT, "127"));
EXPECT(type, INT8_MIN, ENCODED(CharT, "-128"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT16, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<uint16_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, 1234, ENCODED(CharT, "1234"));
EXPECT(type, 12345, ENCODED(CharT, "12345"));
EXPECT(type, UINT16_MAX, ENCODED(CharT, "65535"));
EXPECT(type, static_cast<uint16_t>(-1), ENCODED(CharT, "65535"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, INT16, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<int16_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, 1234, ENCODED(CharT, "1234"));
EXPECT(type, 12345, ENCODED(CharT, "12345"));
EXPECT(type, -1, ENCODED(CharT, "-1"));
EXPECT(type, -12, ENCODED(CharT, "-12"));
EXPECT(type, -123, ENCODED(CharT, "-123"));
EXPECT(type, -1234, ENCODED(CharT, "-1234"));
EXPECT(type, -12345, ENCODED(CharT, "-12345"));
EXPECT(type, INT16_MAX, ENCODED(CharT, "32767"));
EXPECT(type, INT16_MIN, ENCODED(CharT, "-32768"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT32, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<uint32_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, 1234, ENCODED(CharT, "1234"));
EXPECT(type, 12345, ENCODED(CharT, "12345"));
EXPECT(type, 123456, ENCODED(CharT, "123456"));
EXPECT(type, 1234567, ENCODED(CharT, "1234567"));
EXPECT(type, 12345678, ENCODED(CharT, "12345678"));
EXPECT(type, 123456789, ENCODED(CharT, "123456789"));
EXPECT(type, 1234567890, ENCODED(CharT, "1234567890"));
EXPECT(type, UINT32_MAX, ENCODED(CharT, "4294967295"));
EXPECT(type, static_cast<uint32_t>(-1), ENCODED(CharT, "4294967295"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, INT32, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<int32_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, 1234, ENCODED(CharT, "1234"));
EXPECT(type, 12345, ENCODED(CharT, "12345"));
EXPECT(type, 123456, ENCODED(CharT, "123456"));
EXPECT(type, 1234567, ENCODED(CharT, "1234567"));
EXPECT(type, 12345678, ENCODED(CharT, "12345678"));
EXPECT(type, 123456789, ENCODED(CharT, "123456789"));
EXPECT(type, 1234567890, ENCODED(CharT, "1234567890"));
EXPECT(type, -1, ENCODED(CharT, "-1"));
EXPECT(type, -12, ENCODED(CharT, "-12"));
EXPECT(type, -123, ENCODED(CharT, "-123"));
EXPECT(type, -1234, ENCODED(CharT, "-1234"));
EXPECT(type, -12345, ENCODED(CharT, "-12345"));
EXPECT(type, -123456, ENCODED(CharT, "-123456"));
EXPECT(type, -1234567, ENCODED(CharT, "-1234567"));
EXPECT(type, -12345678, ENCODED(CharT, "-12345678"));
EXPECT(type, -123456789, ENCODED(CharT, "-123456789"));
EXPECT(type, -1234567890, ENCODED(CharT, "-1234567890"));
EXPECT(type, INT32_MAX, ENCODED(CharT, "2147483647"));
EXPECT(type, INT32_MIN, ENCODED(CharT, "-2147483648"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT64, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<uint64_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, 1234, ENCODED(CharT, "1234"));
EXPECT(type, 12345, ENCODED(CharT, "12345"));
EXPECT(type, 123456, ENCODED(CharT, "123456"));
EXPECT(type, 1234567, ENCODED(CharT, "1234567"));
EXPECT(type, 12345678, ENCODED(CharT, "12345678"));
EXPECT(type, 123456789, ENCODED(CharT, "123456789"));
EXPECT(type, 1234567890, ENCODED(CharT, "1234567890"));
EXPECT(type, 1234567890123456789, ENCODED(CharT, "1234567890123456789"));
EXPECT(type, UINT64_MAX, ENCODED(CharT, "18446744073709551615"));
EXPECT(type, static_cast<uint64_t>(-1),
ENCODED(CharT, "18446744073709551615"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, INT64, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<int64_t, Dec, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 1, ENCODED(CharT, "1"));
EXPECT(type, 12, ENCODED(CharT, "12"));
EXPECT(type, 123, ENCODED(CharT, "123"));
EXPECT(type, 1234, ENCODED(CharT, "1234"));
EXPECT(type, 12345, ENCODED(CharT, "12345"));
EXPECT(type, 123456, ENCODED(CharT, "123456"));
EXPECT(type, 1234567, ENCODED(CharT, "1234567"));
EXPECT(type, 12345678, ENCODED(CharT, "12345678"));
EXPECT(type, 123456789, ENCODED(CharT, "123456789"));
EXPECT(type, 1234567890, ENCODED(CharT, "1234567890"));
EXPECT(type, 1234567890123456789, ENCODED(CharT, "1234567890123456789"));
EXPECT(type, -1, ENCODED(CharT, "-1"));
EXPECT(type, -12, ENCODED(CharT, "-12"));
EXPECT(type, -123, ENCODED(CharT, "-123"));
EXPECT(type, -1234, ENCODED(CharT, "-1234"));
EXPECT(type, -12345, ENCODED(CharT, "-12345"));
EXPECT(type, -123456, ENCODED(CharT, "-123456"));
EXPECT(type, -1234567, ENCODED(CharT, "-1234567"));
EXPECT(type, -12345678, ENCODED(CharT, "-12345678"));
EXPECT(type, -123456789, ENCODED(CharT, "-123456789"));
EXPECT(type, -1234567890, ENCODED(CharT, "-1234567890"));
EXPECT(type, -1234567890123456789, ENCODED(CharT, "-1234567890123456789"));
EXPECT(type, INT64_MAX, ENCODED(CharT, "9223372036854775807"));
EXPECT(type, INT64_MIN, ENCODED(CharT, "-9223372036854775808"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT64_Base_8, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<int64_t, Oct, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 012345, ENCODED(CharT, "12345"));
EXPECT(type, 0123456701234567012345, ENCODED(CharT, "123456701234567012345"));
EXPECT(type, static_cast<int64_t>(01777777777777777777777),
ENCODED(CharT, "1777777777777777777777"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT64_Base_16, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<uint64_t, Hex, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 0x12345, ENCODED(CharT, "12345"));
EXPECT(type, 0x123456789abcdef, ENCODED(CharT, "123456789abcdef"));
EXPECT(type, 0xffffffffffffffff, ENCODED(CharT, "ffffffffffffffff"));
using TYPE = IntegerToString<uint64_t, Hex::Uppercase, CharT>;
EXPECT(TYPE, 0x123456789abcdef, ENCODED(CharT, "123456789ABCDEF"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT64_Base_2, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<uint64_t, Bin, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 0b111100001100, ENCODED(CharT, "111100001100"));
EXPECT(type, 0b100100011101010111100,
ENCODED(CharT, "100100011101010111100"));
EXPECT(
type, 0xffffffffffffffff,
ENCODED(
CharT,
"1111111111111111111111111111111111111111111111111111111111111111"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT128_Base_16, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<UInt128, Hex::WithWidth<32>, CharT>;
EXPECT(type, 0, ENCODED(CharT, "00000000000000000000000000000000"));
EXPECT(type, 0x12345, ENCODED(CharT, "00000000000000000000000000012345"));
EXPECT(type, 0x12340000'00000000'00000000'00000000_u128,
ENCODED(CharT, "12340000000000000000000000000000"));
EXPECT(type, 0x00000000'00000000'12340000'00000000_u128,
ENCODED(CharT, "00000000000000001234000000000000"));
EXPECT(type, 0x00000000'00000001'23400000'00000000_u128,
ENCODED(CharT, "00000000000000012340000000000000"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT64_Base_36, TestCharTypes) {
using CharT = ParamType;
using type = IntegerToString<uint64_t, Custom<36>, CharT>;
EXPECT(type, 0, ENCODED(CharT, "0"));
EXPECT(type, 12345, ENCODED(CharT, "9ix"));
EXPECT(type, 1047601316295595, ENCODED(CharT, "abcdefghij"));
EXPECT(type, 2092218013456445, ENCODED(CharT, "klmnopqrst"));
EXPECT(type, 0xffffffffffffffff, ENCODED(CharT, "3w5e11264sgsf"));
using TYPE = IntegerToString<uint64_t, Custom<36>::Uppercase, CharT>;
EXPECT(TYPE, 1867590395, ENCODED(CharT, "UVWXYZ"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, UINT256_Base_16, TestCharTypes) {
using CharT = ParamType;
using UInt256 = LIBC_NAMESPACE::UInt<256>;
using type = IntegerToString<UInt256, Hex::WithWidth<64>, CharT>;
EXPECT(
type,
0x0000000000000000000000000000000000000000000000000000000000000000_u256,
ENCODED(
CharT,
"0000000000000000000000000000000000000000000000000000000000000000"));
EXPECT(
type,
0x0000000000000000000000000000000000000000000000000000000000012345_u256,
ENCODED(
CharT,
"0000000000000000000000000000000000000000000000000000000000012345"));
EXPECT(
type,
0x0000000000000000000000000000000012340000000000000000000000000000_u256,
ENCODED(
CharT,
"0000000000000000000000000000000012340000000000000000000000000000"));
EXPECT(
type,
0x0000000000000000000000000000000123400000000000000000000000000000_u256,
ENCODED(
CharT,
"0000000000000000000000000000000123400000000000000000000000000000"));
EXPECT(
type,
0x1234000000000000000000000000000000000000000000000000000000000000_u256,
ENCODED(
CharT,
"1234000000000000000000000000000000000000000000000000000000000000"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, NegativeInterpretedAsPositive,
TestCharTypes) {
using CharT = ParamType;
using BIN = IntegerToString<int8_t, Bin, CharT>;
using OCT = IntegerToString<int8_t, Oct, CharT>;
using DEC = IntegerToString<int8_t, Dec, CharT>;
using HEX = IntegerToString<int8_t, Hex, CharT>;
EXPECT(BIN, -1, ENCODED(CharT, "11111111"));
EXPECT(OCT, -1, ENCODED(CharT, "377"));
EXPECT(DEC, -1, ENCODED(CharT, "-1")); // Only DEC format negative values
EXPECT(HEX, -1, ENCODED(CharT, "ff"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, Width, TestCharTypes) {
using CharT = ParamType;
using BIN = IntegerToString<uint8_t, Bin::WithWidth<4>, CharT>;
using OCT = IntegerToString<uint8_t, Oct::WithWidth<4>, CharT>;
using DEC = IntegerToString<uint8_t, Dec::WithWidth<4>, CharT>;
using HEX = IntegerToString<uint8_t, Hex::WithWidth<4>, CharT>;
EXPECT(BIN, 1, ENCODED(CharT, "0001"));
EXPECT(HEX, 1, ENCODED(CharT, "0001"));
EXPECT(OCT, 1, ENCODED(CharT, "0001"));
EXPECT(DEC, 1, ENCODED(CharT, "0001"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, Prefix, TestCharTypes) {
using CharT = ParamType;
// WithPrefix is not supported for Decimal
using BIN = IntegerToString<uint8_t, Bin::WithPrefix, CharT>;
using OCT = IntegerToString<uint8_t, Oct::WithPrefix, CharT>;
using HEX = IntegerToString<uint8_t, Hex::WithPrefix, CharT>;
EXPECT(BIN, 1, ENCODED(CharT, "0b1"));
EXPECT(HEX, 1, ENCODED(CharT, "0x1"));
EXPECT(OCT, 1, ENCODED(CharT, "01"));
EXPECT(OCT, 0, ENCODED(CharT, "0")); // Zero is not prefixed for octal
}
TYPED_TEST(LlvmLibcIntegerToStringTest, Uppercase, TestCharTypes) {
using CharT = ParamType;
using HEX = IntegerToString<uint64_t, Hex::Uppercase, CharT>;
EXPECT(HEX, 0xDEADC0DE, ENCODED(CharT, "DEADC0DE"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, Sign, TestCharTypes) {
using CharT = ParamType;
// WithSign only compiles with DEC
using DEC = IntegerToString<int8_t, Dec::WithSign, CharT>;
EXPECT(DEC, -1, ENCODED(CharT, "-1"));
EXPECT(DEC, 0, ENCODED(CharT, "+0"));
EXPECT(DEC, 1, ENCODED(CharT, "+1"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, BigInt_Base_10, TestCharTypes) {
using CharT = ParamType;
uint64_t int256_max_w64[4] = {
0xFFFFFFFFFFFFFFFF,
0xFFFFFFFFFFFFFFFF,
0xFFFFFFFFFFFFFFFF,
0x7FFFFFFFFFFFFFFF,
};
uint64_t int256_min_w64[4] = {
0,
0,
0,
0x8000000000000000,
};
uint32_t int256_max_w32[8] = {
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF,
};
uint32_t int256_min_w32[8] = {
0, 0, 0, 0, 0, 0, 0, 0x80000000,
};
uint16_t int256_max_w16[16] = {
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF,
};
uint16_t int256_min_w16[16] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x8000,
};
using unsigned_type_w64 =
IntegerToString<BigInt<256, false, uint64_t>, Dec, CharT>;
EXPECT(unsigned_type_w64, 0, ENCODED(CharT, "0"));
EXPECT(unsigned_type_w64, 1, ENCODED(CharT, "1"));
EXPECT(unsigned_type_w64, -1,
ENCODED(CharT, "115792089237316195423570985008687907853269984665640564"
"039457584007913129639935"));
EXPECT(unsigned_type_w64, int256_max_w64,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819967"));
EXPECT(unsigned_type_w64, int256_min_w64,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819968"));
using unsigned_type_w32 =
IntegerToString<BigInt<256, false, uint32_t>, Dec, CharT>;
EXPECT(unsigned_type_w32, 0, ENCODED(CharT, "0"));
EXPECT(unsigned_type_w32, 1, ENCODED(CharT, "1"));
EXPECT(unsigned_type_w32, -1,
ENCODED(CharT, "115792089237316195423570985008687907853269984665640564"
"039457584007913129639935"));
EXPECT(unsigned_type_w32, int256_max_w32,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819967"));
EXPECT(unsigned_type_w32, int256_min_w32,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819968"));
using unsigned_type_w16 =
IntegerToString<BigInt<256, false, uint16_t>, Dec, CharT>;
EXPECT(unsigned_type_w16, 0, ENCODED(CharT, "0"));
EXPECT(unsigned_type_w16, 1, ENCODED(CharT, "1"));
EXPECT(unsigned_type_w16, -1,
ENCODED(CharT, "115792089237316195423570985008687907853269984665640564"
"039457584007913129639935"));
EXPECT(unsigned_type_w16, int256_max_w16,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819967"));
EXPECT(unsigned_type_w16, int256_min_w16,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819968"));
using signed_type_w64 =
IntegerToString<BigInt<256, true, uint64_t>, Dec, CharT>;
EXPECT(signed_type_w64, 0, ENCODED(CharT, "0"));
EXPECT(signed_type_w64, 1, ENCODED(CharT, "1"));
EXPECT(signed_type_w64, -1, ENCODED(CharT, "-1"));
EXPECT(signed_type_w64, int256_max_w64,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819967"));
EXPECT(signed_type_w64, int256_min_w64,
ENCODED(CharT, "-57896044618658097711785492504343953926634992332820282"
"019728792003956564819968"));
using signed_type_w32 =
IntegerToString<BigInt<256, true, uint32_t>, Dec, CharT>;
EXPECT(signed_type_w32, 0, ENCODED(CharT, "0"));
EXPECT(signed_type_w32, 1, ENCODED(CharT, "1"));
EXPECT(signed_type_w32, -1, ENCODED(CharT, "-1"));
EXPECT(signed_type_w32, int256_max_w32,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819967"));
EXPECT(signed_type_w32, int256_min_w32,
ENCODED(CharT, "-57896044618658097711785492504343953926634992332820282"
"019728792003956564819968"));
using signed_type_w16 =
IntegerToString<BigInt<256, true, uint16_t>, Dec, CharT>;
EXPECT(signed_type_w16, 0, ENCODED(CharT, "0"));
EXPECT(signed_type_w16, 1, ENCODED(CharT, "1"));
EXPECT(signed_type_w16, -1, ENCODED(CharT, "-1"));
EXPECT(signed_type_w16, int256_max_w16,
ENCODED(CharT, "578960446186580977117854925043439539266349923328202820"
"19728792003956564819967"));
EXPECT(signed_type_w16, int256_min_w16,
ENCODED(CharT, "-57896044618658097711785492504343953926634992332820282"
"019728792003956564819968"));
}
TYPED_TEST(LlvmLibcIntegerToStringTest, BufferOverrun, TestCharTypes) {
using CharT = ParamType;
{ // Writing '0' in an empty buffer requiring zero digits : works
const auto view = IntegerToString<int, Dec::WithWidth<0>, CharT>::format_to(
span<CharT>(), 0);
ASSERT_TRUE(view.has_value());
ASSERT_EQ(*view, basic_string_view<CharT>());
}
CharT buffer[1];
{ // Writing '1' in a buffer of one char : works
const auto view = IntegerToString<int, Dec, CharT>::format_to(buffer, 1);
ASSERT_TRUE(view.has_value());
ASSERT_EQ(*view, basic_string_view<CharT>(ENCODED(CharT, "1")));
}
{ // Writing '11' in a buffer of one char : fails
const auto view = IntegerToString<int, Dec, CharT>::format_to(buffer, 11);
ASSERT_FALSE(view.has_value());
}
}