1 //===-- Unittests for integer_to_string -----------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "src/__support/CPP/StringView.h" 10 #include "src/__support/integer_to_string.h" 11 12 #include "utils/UnitTest/Test.h" 13 14 #include "limits.h" 15 16 using __llvm_libc::integer_to_string; 17 using __llvm_libc::IntegerToString; 18 using __llvm_libc::cpp::StringView; 19 20 TEST(LlvmLibcIntegerToStringTest, UINT8) { 21 EXPECT_EQ(integer_to_string(uint8_t(0)).str(), (StringView("0"))); 22 EXPECT_EQ(integer_to_string(uint8_t(1)).str(), (StringView("1"))); 23 EXPECT_EQ(integer_to_string(uint8_t(12)).str(), (StringView("12"))); 24 EXPECT_EQ(integer_to_string(uint8_t(123)).str(), (StringView("123"))); 25 EXPECT_EQ(integer_to_string(uint8_t(UINT8_MAX)).str(), (StringView("255"))); 26 EXPECT_EQ(integer_to_string(uint8_t(-1)).str(), (StringView("255"))); 27 } 28 29 TEST(LlvmLibcIntegerToStringTest, INT8) { 30 EXPECT_EQ(integer_to_string(int8_t(0)).str(), (StringView("0"))); 31 EXPECT_EQ(integer_to_string(int8_t(1)).str(), (StringView("1"))); 32 EXPECT_EQ(integer_to_string(int8_t(12)).str(), (StringView("12"))); 33 EXPECT_EQ(integer_to_string(int8_t(123)).str(), (StringView("123"))); 34 EXPECT_EQ(integer_to_string(int8_t(-12)).str(), (StringView("-12"))); 35 EXPECT_EQ(integer_to_string(int8_t(-123)).str(), (StringView("-123"))); 36 EXPECT_EQ(integer_to_string(int8_t(INT8_MAX)).str(), (StringView("127"))); 37 EXPECT_EQ(integer_to_string(int8_t(INT8_MIN)).str(), (StringView("-128"))); 38 } 39 40 TEST(LlvmLibcIntegerToStringTest, UINT16) { 41 EXPECT_EQ(integer_to_string(uint16_t(0)).str(), (StringView("0"))); 42 EXPECT_EQ(integer_to_string(uint16_t(1)).str(), (StringView("1"))); 43 EXPECT_EQ(integer_to_string(uint16_t(12)).str(), (StringView("12"))); 44 EXPECT_EQ(integer_to_string(uint16_t(123)).str(), (StringView("123"))); 45 EXPECT_EQ(integer_to_string(uint16_t(1234)).str(), (StringView("1234"))); 46 EXPECT_EQ(integer_to_string(uint16_t(12345)).str(), (StringView("12345"))); 47 EXPECT_EQ(integer_to_string(uint16_t(UINT16_MAX)).str(), 48 (StringView("65535"))); 49 EXPECT_EQ(integer_to_string(uint16_t(-1)).str(), (StringView("65535"))); 50 } 51 52 TEST(LlvmLibcIntegerToStringTest, INT16) { 53 EXPECT_EQ(integer_to_string(int16_t(0)).str(), (StringView("0"))); 54 EXPECT_EQ(integer_to_string(int16_t(1)).str(), (StringView("1"))); 55 EXPECT_EQ(integer_to_string(int16_t(12)).str(), (StringView("12"))); 56 EXPECT_EQ(integer_to_string(int16_t(123)).str(), (StringView("123"))); 57 EXPECT_EQ(integer_to_string(int16_t(1234)).str(), (StringView("1234"))); 58 EXPECT_EQ(integer_to_string(int16_t(12345)).str(), (StringView("12345"))); 59 EXPECT_EQ(integer_to_string(int16_t(-1)).str(), (StringView("-1"))); 60 EXPECT_EQ(integer_to_string(int16_t(-12)).str(), (StringView("-12"))); 61 EXPECT_EQ(integer_to_string(int16_t(-123)).str(), (StringView("-123"))); 62 EXPECT_EQ(integer_to_string(int16_t(-1234)).str(), (StringView("-1234"))); 63 EXPECT_EQ(integer_to_string(int16_t(-12345)).str(), (StringView("-12345"))); 64 EXPECT_EQ(integer_to_string(int16_t(INT16_MAX)).str(), (StringView("32767"))); 65 EXPECT_EQ(integer_to_string(int16_t(INT16_MIN)).str(), 66 (StringView("-32768"))); 67 } 68 69 TEST(LlvmLibcIntegerToStringTest, UINT32) { 70 EXPECT_EQ(integer_to_string(uint32_t(0)).str(), (StringView("0"))); 71 EXPECT_EQ(integer_to_string(uint32_t(1)).str(), (StringView("1"))); 72 EXPECT_EQ(integer_to_string(uint32_t(12)).str(), (StringView("12"))); 73 EXPECT_EQ(integer_to_string(uint32_t(123)).str(), (StringView("123"))); 74 EXPECT_EQ(integer_to_string(uint32_t(1234)).str(), (StringView("1234"))); 75 EXPECT_EQ(integer_to_string(uint32_t(12345)).str(), (StringView("12345"))); 76 EXPECT_EQ(integer_to_string(uint32_t(123456)).str(), (StringView("123456"))); 77 EXPECT_EQ(integer_to_string(uint32_t(1234567)).str(), 78 (StringView("1234567"))); 79 EXPECT_EQ(integer_to_string(uint32_t(12345678)).str(), 80 (StringView("12345678"))); 81 EXPECT_EQ(integer_to_string(uint32_t(123456789)).str(), 82 (StringView("123456789"))); 83 EXPECT_EQ(integer_to_string(uint32_t(1234567890)).str(), 84 (StringView("1234567890"))); 85 EXPECT_EQ(integer_to_string(uint32_t(UINT32_MAX)).str(), 86 (StringView("4294967295"))); 87 EXPECT_EQ(integer_to_string(uint32_t(-1)).str(), (StringView("4294967295"))); 88 } 89 90 TEST(LlvmLibcIntegerToStringTest, INT32) { 91 EXPECT_EQ(integer_to_string(int32_t(0)).str(), (StringView("0"))); 92 EXPECT_EQ(integer_to_string(int32_t(1)).str(), (StringView("1"))); 93 EXPECT_EQ(integer_to_string(int32_t(12)).str(), (StringView("12"))); 94 EXPECT_EQ(integer_to_string(int32_t(123)).str(), (StringView("123"))); 95 EXPECT_EQ(integer_to_string(int32_t(1234)).str(), (StringView("1234"))); 96 EXPECT_EQ(integer_to_string(int32_t(12345)).str(), (StringView("12345"))); 97 EXPECT_EQ(integer_to_string(int32_t(123456)).str(), (StringView("123456"))); 98 EXPECT_EQ(integer_to_string(int32_t(1234567)).str(), (StringView("1234567"))); 99 EXPECT_EQ(integer_to_string(int32_t(12345678)).str(), 100 (StringView("12345678"))); 101 EXPECT_EQ(integer_to_string(int32_t(123456789)).str(), 102 (StringView("123456789"))); 103 EXPECT_EQ(integer_to_string(int32_t(1234567890)).str(), 104 (StringView("1234567890"))); 105 EXPECT_EQ(integer_to_string(int32_t(-1)).str(), (StringView("-1"))); 106 EXPECT_EQ(integer_to_string(int32_t(-12)).str(), (StringView("-12"))); 107 EXPECT_EQ(integer_to_string(int32_t(-123)).str(), (StringView("-123"))); 108 EXPECT_EQ(integer_to_string(int32_t(-1234)).str(), (StringView("-1234"))); 109 EXPECT_EQ(integer_to_string(int32_t(-12345)).str(), (StringView("-12345"))); 110 EXPECT_EQ(integer_to_string(int32_t(-123456)).str(), (StringView("-123456"))); 111 EXPECT_EQ(integer_to_string(int32_t(-1234567)).str(), 112 (StringView("-1234567"))); 113 EXPECT_EQ(integer_to_string(int32_t(-12345678)).str(), 114 (StringView("-12345678"))); 115 EXPECT_EQ(integer_to_string(int32_t(-123456789)).str(), 116 (StringView("-123456789"))); 117 EXPECT_EQ(integer_to_string(int32_t(-1234567890)).str(), 118 (StringView("-1234567890"))); 119 EXPECT_EQ(integer_to_string(int32_t(INT32_MAX)).str(), 120 (StringView("2147483647"))); 121 EXPECT_EQ(integer_to_string(int32_t(INT32_MIN)).str(), 122 (StringView("-2147483648"))); 123 } 124 125 TEST(LlvmLibcIntegerToStringTest, UINT64) { 126 EXPECT_EQ(integer_to_string(uint64_t(0)).str(), (StringView("0"))); 127 EXPECT_EQ(integer_to_string(uint64_t(1)).str(), (StringView("1"))); 128 EXPECT_EQ(integer_to_string(uint64_t(12)).str(), (StringView("12"))); 129 EXPECT_EQ(integer_to_string(uint64_t(123)).str(), (StringView("123"))); 130 EXPECT_EQ(integer_to_string(uint64_t(1234)).str(), (StringView("1234"))); 131 EXPECT_EQ(integer_to_string(uint64_t(12345)).str(), (StringView("12345"))); 132 EXPECT_EQ(integer_to_string(uint64_t(123456)).str(), (StringView("123456"))); 133 EXPECT_EQ(integer_to_string(uint64_t(1234567)).str(), 134 (StringView("1234567"))); 135 EXPECT_EQ(integer_to_string(uint64_t(12345678)).str(), 136 (StringView("12345678"))); 137 EXPECT_EQ(integer_to_string(uint64_t(123456789)).str(), 138 (StringView("123456789"))); 139 EXPECT_EQ(integer_to_string(uint64_t(1234567890)).str(), 140 (StringView("1234567890"))); 141 EXPECT_EQ(integer_to_string(uint64_t(1234567890123456789)).str(), 142 (StringView("1234567890123456789"))); 143 EXPECT_EQ(integer_to_string(uint64_t(UINT64_MAX)).str(), 144 (StringView("18446744073709551615"))); 145 EXPECT_EQ(integer_to_string(uint64_t(-1)).str(), 146 (StringView("18446744073709551615"))); 147 } 148 149 TEST(LlvmLibcIntegerToStringTest, INT64) { 150 EXPECT_EQ(integer_to_string(int64_t(0)).str(), (StringView("0"))); 151 EXPECT_EQ(integer_to_string(int64_t(1)).str(), (StringView("1"))); 152 EXPECT_EQ(integer_to_string(int64_t(12)).str(), (StringView("12"))); 153 EXPECT_EQ(integer_to_string(int64_t(123)).str(), (StringView("123"))); 154 EXPECT_EQ(integer_to_string(int64_t(1234)).str(), (StringView("1234"))); 155 EXPECT_EQ(integer_to_string(int64_t(12345)).str(), (StringView("12345"))); 156 EXPECT_EQ(integer_to_string(int64_t(123456)).str(), (StringView("123456"))); 157 EXPECT_EQ(integer_to_string(int64_t(1234567)).str(), (StringView("1234567"))); 158 EXPECT_EQ(integer_to_string(int64_t(12345678)).str(), 159 (StringView("12345678"))); 160 EXPECT_EQ(integer_to_string(int64_t(123456789)).str(), 161 (StringView("123456789"))); 162 EXPECT_EQ(integer_to_string(int64_t(1234567890)).str(), 163 (StringView("1234567890"))); 164 EXPECT_EQ(integer_to_string(int64_t(1234567890123456789)).str(), 165 (StringView("1234567890123456789"))); 166 EXPECT_EQ(integer_to_string(int64_t(-1)).str(), (StringView("-1"))); 167 EXPECT_EQ(integer_to_string(int64_t(-12)).str(), (StringView("-12"))); 168 EXPECT_EQ(integer_to_string(int64_t(-123)).str(), (StringView("-123"))); 169 EXPECT_EQ(integer_to_string(int64_t(-1234)).str(), (StringView("-1234"))); 170 EXPECT_EQ(integer_to_string(int64_t(-12345)).str(), (StringView("-12345"))); 171 EXPECT_EQ(integer_to_string(int64_t(-123456)).str(), (StringView("-123456"))); 172 EXPECT_EQ(integer_to_string(int64_t(-1234567)).str(), 173 (StringView("-1234567"))); 174 EXPECT_EQ(integer_to_string(int64_t(-12345678)).str(), 175 (StringView("-12345678"))); 176 EXPECT_EQ(integer_to_string(int64_t(-123456789)).str(), 177 (StringView("-123456789"))); 178 EXPECT_EQ(integer_to_string(int64_t(-1234567890)).str(), 179 (StringView("-1234567890"))); 180 EXPECT_EQ(integer_to_string(int64_t(-1234567890123456789)).str(), 181 (StringView("-1234567890123456789"))); 182 EXPECT_EQ(integer_to_string(int64_t(INT64_MAX)).str(), 183 (StringView("9223372036854775807"))); 184 EXPECT_EQ(integer_to_string(int64_t(INT64_MIN)).str(), 185 (StringView("-9223372036854775808"))); 186 } 187 188 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_10) { 189 EXPECT_EQ((IntegerToString<uint64_t, 10>(int64_t(0)).str()), StringView("0")); 190 EXPECT_EQ((IntegerToString<uint64_t, 10>(int64_t(1234567890123456789)).str()), 191 StringView("1234567890123456789")); 192 } 193 194 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_8) { 195 EXPECT_EQ((IntegerToString<uint64_t, 8>(int64_t(0)).str()), StringView("0")); 196 EXPECT_EQ((IntegerToString<uint64_t, 8>(int64_t(012345)).str()), 197 StringView("12345")); 198 EXPECT_EQ( 199 (IntegerToString<uint64_t, 8>(int64_t(0123456701234567012345)).str()), 200 StringView("123456701234567012345")); 201 EXPECT_EQ( 202 (IntegerToString<uint64_t, 8>(int64_t(01777777777777777777777)).str()), 203 StringView("1777777777777777777777")); 204 } 205 206 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_16) { 207 EXPECT_EQ((IntegerToString<uint64_t, 16>(int64_t(0)).str()), StringView("0")); 208 EXPECT_EQ((IntegerToString<uint64_t, 16>(int64_t(0x12345)).str()), 209 StringView("12345")); 210 EXPECT_EQ((IntegerToString<uint64_t, 16>(int64_t(0x123456789abcdef)).str()), 211 StringView("123456789abcdef")); 212 EXPECT_EQ( 213 (IntegerToString<uint64_t, 16>(int64_t(0x123456789abcdef), false).str()), 214 StringView("123456789ABCDEF")); 215 EXPECT_EQ((IntegerToString<uint64_t, 16>(int64_t(0xffffffffffffffff)).str()), 216 StringView("ffffffffffffffff")); 217 } 218 219 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_2) { 220 EXPECT_EQ((IntegerToString<uint64_t, 2>(int64_t(0)).str()), StringView("0")); 221 EXPECT_EQ((IntegerToString<uint64_t, 2>(int64_t(0xf0c)).str()), 222 StringView("111100001100")); 223 EXPECT_EQ((IntegerToString<uint64_t, 2>(int64_t(0x123abc)).str()), 224 StringView("100100011101010111100")); 225 EXPECT_EQ( 226 (IntegerToString<uint64_t, 2>(int64_t(0xffffffffffffffff)).str()), 227 StringView( 228 "1111111111111111111111111111111111111111111111111111111111111111")); 229 } 230 231 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_36) { 232 EXPECT_EQ((IntegerToString<uint64_t, 36>(int64_t(0)).str()), StringView("0")); 233 EXPECT_EQ((IntegerToString<uint64_t, 36>(int64_t(12345)).str()), 234 StringView("9ix")); 235 EXPECT_EQ((IntegerToString<uint64_t, 36>(int64_t(1047601316295595)).str()), 236 StringView("abcdefghij")); 237 EXPECT_EQ((IntegerToString<uint64_t, 36>(int64_t(2092218013456445)).str()), 238 StringView("klmnopqrst")); 239 EXPECT_EQ((IntegerToString<uint64_t, 36>(int64_t(1867590395), false).str()), 240 StringView("UVWXYZ")); 241 EXPECT_EQ((IntegerToString<uint64_t, 36>(int64_t(0xffffffffffffffff)).str()), 242 StringView("3w5e11264sgsf")); 243 } 244