//===-- 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/string_view.h" #include "src/__support/UInt.h" #include "src/__support/UInt128.h" #include "src/__support/integer_to_string.h" #include "test/UnitTest/Test.h" #include "limits.h" using __llvm_libc::IntegerToString; using __llvm_libc::cpp::string_view; TEST(LlvmLibcIntegerToStringTest, UINT8) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(uint8_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(uint8_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(uint8_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(uint8_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(uint8_t(UINT8_MAX), buf), string_view("255")); EXPECT_EQ(*IntegerToString::dec(uint8_t(-1), buf), string_view("255")); } TEST(LlvmLibcIntegerToStringTest, INT8) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(int8_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(int8_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(int8_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(int8_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(int8_t(-12), buf), string_view("-12")); EXPECT_EQ(*IntegerToString::dec(int8_t(-123), buf), string_view("-123")); EXPECT_EQ(*IntegerToString::dec(int8_t(INT8_MAX), buf), string_view("127")); EXPECT_EQ(*IntegerToString::dec(int8_t(INT8_MIN), buf), string_view("-128")); } TEST(LlvmLibcIntegerToStringTest, UINT16) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(uint16_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(uint16_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(uint16_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(uint16_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(uint16_t(1234), buf), string_view("1234")); EXPECT_EQ(*IntegerToString::dec(uint16_t(12345), buf), string_view("12345")); EXPECT_EQ(*IntegerToString::dec(uint16_t(UINT16_MAX), buf), string_view("65535")); EXPECT_EQ(*IntegerToString::dec(uint16_t(-1), buf), string_view("65535")); } TEST(LlvmLibcIntegerToStringTest, INT16) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(int16_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(int16_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(int16_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(int16_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(int16_t(1234), buf), string_view("1234")); EXPECT_EQ(*IntegerToString::dec(int16_t(12345), buf), string_view("12345")); EXPECT_EQ(*IntegerToString::dec(int16_t(-1), buf), string_view("-1")); EXPECT_EQ(*IntegerToString::dec(int16_t(-12), buf), string_view("-12")); EXPECT_EQ(*IntegerToString::dec(int16_t(-123), buf), string_view("-123")); EXPECT_EQ(*IntegerToString::dec(int16_t(-1234), buf), string_view("-1234")); EXPECT_EQ(*IntegerToString::dec(int16_t(-12345), buf), string_view("-12345")); EXPECT_EQ(*IntegerToString::dec(int16_t(INT16_MAX), buf), string_view("32767")); EXPECT_EQ(*IntegerToString::dec(int16_t(INT16_MIN), buf), string_view("-32768")); } TEST(LlvmLibcIntegerToStringTest, UINT32) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(uint32_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(uint32_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(uint32_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(uint32_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(uint32_t(1234), buf), string_view("1234")); EXPECT_EQ(*IntegerToString::dec(uint32_t(12345), buf), string_view("12345")); EXPECT_EQ(*IntegerToString::dec(uint32_t(123456), buf), string_view("123456")); EXPECT_EQ(*IntegerToString::dec(uint32_t(1234567), buf), string_view("1234567")); EXPECT_EQ(*IntegerToString::dec(uint32_t(12345678), buf), string_view("12345678")); EXPECT_EQ(*IntegerToString::dec(uint32_t(123456789), buf), string_view("123456789")); EXPECT_EQ(*IntegerToString::dec(uint32_t(1234567890), buf), string_view("1234567890")); EXPECT_EQ(*IntegerToString::dec(uint32_t(UINT32_MAX), buf), string_view("4294967295")); EXPECT_EQ(*IntegerToString::dec(uint32_t(-1), buf), string_view("4294967295")); } TEST(LlvmLibcIntegerToStringTest, INT32) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(int32_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(int32_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(int32_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(int32_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(int32_t(1234), buf), string_view("1234")); EXPECT_EQ(*IntegerToString::dec(int32_t(12345), buf), string_view("12345")); EXPECT_EQ(*IntegerToString::dec(int32_t(123456), buf), string_view("123456")); EXPECT_EQ(*IntegerToString::dec(int32_t(1234567), buf), string_view("1234567")); EXPECT_EQ(*IntegerToString::dec(int32_t(12345678), buf), string_view("12345678")); EXPECT_EQ(*IntegerToString::dec(int32_t(123456789), buf), string_view("123456789")); EXPECT_EQ(*IntegerToString::dec(int32_t(1234567890), buf), string_view("1234567890")); EXPECT_EQ(*IntegerToString::dec(int32_t(-1), buf), string_view("-1")); EXPECT_EQ(*IntegerToString::dec(int32_t(-12), buf), string_view("-12")); EXPECT_EQ(*IntegerToString::dec(int32_t(-123), buf), string_view("-123")); EXPECT_EQ(*IntegerToString::dec(int32_t(-1234), buf), string_view("-1234")); EXPECT_EQ(*IntegerToString::dec(int32_t(-12345), buf), string_view("-12345")); EXPECT_EQ(*IntegerToString::dec(int32_t(-123456), buf), string_view("-123456")); EXPECT_EQ(*IntegerToString::dec(int32_t(-1234567), buf), string_view("-1234567")); EXPECT_EQ(*IntegerToString::dec(int32_t(-12345678), buf), string_view("-12345678")); EXPECT_EQ(*IntegerToString::dec(int32_t(-123456789), buf), string_view("-123456789")); EXPECT_EQ(*IntegerToString::dec(int32_t(-1234567890), buf), string_view("-1234567890")); EXPECT_EQ(*IntegerToString::dec(int32_t(INT32_MAX), buf), string_view("2147483647")); EXPECT_EQ(*IntegerToString::dec(int32_t(INT32_MIN), buf), string_view("-2147483648")); } TEST(LlvmLibcIntegerToStringTest, UINT64) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(uint64_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(uint64_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(uint64_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(uint64_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(uint64_t(1234), buf), string_view("1234")); EXPECT_EQ(*IntegerToString::dec(uint64_t(12345), buf), string_view("12345")); EXPECT_EQ(*IntegerToString::dec(uint64_t(123456), buf), string_view("123456")); EXPECT_EQ(*IntegerToString::dec(uint64_t(1234567), buf), string_view("1234567")); EXPECT_EQ(*IntegerToString::dec(uint64_t(12345678), buf), string_view("12345678")); EXPECT_EQ(*IntegerToString::dec(uint64_t(123456789), buf), string_view("123456789")); EXPECT_EQ(*IntegerToString::dec(uint64_t(1234567890), buf), string_view("1234567890")); EXPECT_EQ(*IntegerToString::dec(uint64_t(1234567890123456789), buf), string_view("1234567890123456789")); EXPECT_EQ(*IntegerToString::dec(uint64_t(UINT64_MAX), buf), string_view("18446744073709551615")); EXPECT_EQ(*IntegerToString::dec(uint64_t(-1), buf), string_view("18446744073709551615")); } TEST(LlvmLibcIntegerToStringTest, INT64) { char buf[IntegerToString::dec_bufsize()]; EXPECT_EQ(*IntegerToString::dec(int64_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::dec(int64_t(1), buf), string_view("1")); EXPECT_EQ(*IntegerToString::dec(int64_t(12), buf), string_view("12")); EXPECT_EQ(*IntegerToString::dec(int64_t(123), buf), string_view("123")); EXPECT_EQ(*IntegerToString::dec(int64_t(1234), buf), string_view("1234")); EXPECT_EQ(*IntegerToString::dec(int64_t(12345), buf), string_view("12345")); EXPECT_EQ(*IntegerToString::dec(int64_t(123456), buf), string_view("123456")); EXPECT_EQ(*IntegerToString::dec(int64_t(1234567), buf), string_view("1234567")); EXPECT_EQ(*IntegerToString::dec(int64_t(12345678), buf), string_view("12345678")); EXPECT_EQ(*IntegerToString::dec(int64_t(123456789), buf), string_view("123456789")); EXPECT_EQ(*IntegerToString::dec(int64_t(1234567890), buf), string_view("1234567890")); EXPECT_EQ(*IntegerToString::dec(int64_t(1234567890123456789), buf), string_view("1234567890123456789")); EXPECT_EQ(*IntegerToString::dec(int64_t(-1), buf), string_view("-1")); EXPECT_EQ(*IntegerToString::dec(int64_t(-12), buf), string_view("-12")); EXPECT_EQ(*IntegerToString::dec(int64_t(-123), buf), string_view("-123")); EXPECT_EQ(*IntegerToString::dec(int64_t(-1234), buf), string_view("-1234")); EXPECT_EQ(*IntegerToString::dec(int64_t(-12345), buf), string_view("-12345")); EXPECT_EQ(*IntegerToString::dec(int64_t(-123456), buf), string_view("-123456")); EXPECT_EQ(*IntegerToString::dec(int64_t(-1234567), buf), string_view("-1234567")); EXPECT_EQ(*IntegerToString::dec(int64_t(-12345678), buf), string_view("-12345678")); EXPECT_EQ(*IntegerToString::dec(int64_t(-123456789), buf), string_view("-123456789")); EXPECT_EQ(*IntegerToString::dec(int64_t(-1234567890), buf), string_view("-1234567890")); EXPECT_EQ(*IntegerToString::dec(int64_t(-1234567890123456789), buf), string_view("-1234567890123456789")); EXPECT_EQ(*IntegerToString::dec(int64_t(INT64_MAX), buf), string_view("9223372036854775807")); EXPECT_EQ(*IntegerToString::dec(int64_t(INT64_MIN), buf), string_view("-9223372036854775808")); } TEST(LlvmLibcIntegerToStringTest, UINT64_Base_8) { char buf[IntegerToString::oct_bufsize()]; EXPECT_EQ((*IntegerToString::oct(uint64_t(0), buf)), string_view("0")); EXPECT_EQ((*IntegerToString::oct(uint64_t(012345), buf)), string_view("12345")); EXPECT_EQ((*IntegerToString::oct(uint64_t(0123456701234567012345), buf)), string_view("123456701234567012345")); EXPECT_EQ((*IntegerToString::oct(uint64_t(01777777777777777777777), buf)), string_view("1777777777777777777777")); } TEST(LlvmLibcIntegerToStringTest, UINT64_Base_16) { char buf[IntegerToString::hex_bufsize()]; EXPECT_EQ(*IntegerToString::hex(uint64_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::hex(uint64_t(0x12345), buf), string_view("12345")); EXPECT_EQ((*IntegerToString::hex(uint64_t(0x123456789abcdef), buf)), string_view("123456789abcdef")); EXPECT_EQ(*IntegerToString::hex(uint64_t(0x123456789abcdef), buf, false), string_view("123456789ABCDEF")); EXPECT_EQ(*IntegerToString::hex(uint64_t(0xffffffffffffffff), buf), string_view("ffffffffffffffff")); } TEST(LlvmLibcIntegerToStringTest, UINT64_Base_2) { char buf[IntegerToString::bin_bufsize()]; EXPECT_EQ(*IntegerToString::bin(uint64_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::bin(uint64_t(0xf0c), buf), string_view("111100001100")); EXPECT_EQ(*IntegerToString::bin(uint64_t(0x123abc), buf), string_view("100100011101010111100")); EXPECT_EQ( *IntegerToString::bin(uint64_t(0xffffffffffffffff), buf), string_view( "1111111111111111111111111111111111111111111111111111111111111111")); } TEST(LlvmLibcIntegerToStringTest, UINT64_Base_36) { char buf[IntegerToString::bufsize<36, uint64_t>()]; EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(0), buf), string_view("0")); EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(12345), buf), string_view("9ix")); EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(1047601316295595), buf), string_view("abcdefghij")); EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(2092218013456445), buf), string_view("klmnopqrst")); EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(1867590395), buf, false), string_view("UVWXYZ")); EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(0xffffffffffffffff), buf), string_view("3w5e11264sgsf")); } TEST(LlvmLibcIntegerToStringTest, UINT128_Base_16) { char buf[IntegerToString::hex_bufsize()]; EXPECT_EQ(*IntegerToString::hex(static_cast(0), buf), string_view("00000000000000000000000000000000")); EXPECT_EQ(*IntegerToString::hex(static_cast(0x12345), buf), string_view("00000000000000000000000000012345")); EXPECT_EQ((*IntegerToString::hex(static_cast(0x1234) << 112, buf)), string_view("12340000000000000000000000000000")); EXPECT_EQ((*IntegerToString::hex(static_cast(0x1234) << 48, buf)), string_view("00000000000000001234000000000000")); EXPECT_EQ((*IntegerToString::hex(static_cast(0x1234) << 52, buf)), string_view("00000000000000012340000000000000")); } TEST(LlvmLibcIntegerToStringTest, UINT256_Base_16) { using UInt256 = __llvm_libc::cpp::UInt<256>; char buf[IntegerToString::hex_bufsize()]; EXPECT_EQ( *IntegerToString::hex(static_cast(0), buf), string_view( "0000000000000000000000000000000000000000000000000000000000000000")); EXPECT_EQ( *IntegerToString::hex(static_cast(0x12345), buf), string_view( "0000000000000000000000000000000000000000000000000000000000012345")); EXPECT_EQ( (*IntegerToString::hex(static_cast(0x1234) << 112, buf)), string_view( "0000000000000000000000000000000012340000000000000000000000000000")); EXPECT_EQ( (*IntegerToString::hex(static_cast(0x1234) << 116, buf)), string_view( "0000000000000000000000000000000123400000000000000000000000000000")); EXPECT_EQ( (*IntegerToString::hex(static_cast(0x1234) << 240, buf)), string_view( "1234000000000000000000000000000000000000000000000000000000000000")); }