1 //===-- Unittests for IntegerToString -------------------------------------===// 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/string_view.h" 10 #include "src/__support/UInt.h" 11 #include "src/__support/UInt128.h" 12 #include "src/__support/integer_to_string.h" 13 14 #include "test/UnitTest/Test.h" 15 16 #include "limits.h" 17 18 using __llvm_libc::IntegerToString; 19 using __llvm_libc::cpp::string_view; 20 21 TEST(LlvmLibcIntegerToStringTest, UINT8) { 22 char buf[IntegerToString::dec_bufsize<uint8_t>()]; 23 EXPECT_EQ(*IntegerToString::dec(uint8_t(0), buf), string_view("0")); 24 EXPECT_EQ(*IntegerToString::dec(uint8_t(1), buf), string_view("1")); 25 EXPECT_EQ(*IntegerToString::dec(uint8_t(12), buf), string_view("12")); 26 EXPECT_EQ(*IntegerToString::dec(uint8_t(123), buf), string_view("123")); 27 EXPECT_EQ(*IntegerToString::dec(uint8_t(UINT8_MAX), buf), string_view("255")); 28 EXPECT_EQ(*IntegerToString::dec(uint8_t(-1), buf), string_view("255")); 29 } 30 31 TEST(LlvmLibcIntegerToStringTest, INT8) { 32 char buf[IntegerToString::dec_bufsize<int8_t>()]; 33 EXPECT_EQ(*IntegerToString::dec(int8_t(0), buf), string_view("0")); 34 EXPECT_EQ(*IntegerToString::dec(int8_t(1), buf), string_view("1")); 35 EXPECT_EQ(*IntegerToString::dec(int8_t(12), buf), string_view("12")); 36 EXPECT_EQ(*IntegerToString::dec(int8_t(123), buf), string_view("123")); 37 EXPECT_EQ(*IntegerToString::dec(int8_t(-12), buf), string_view("-12")); 38 EXPECT_EQ(*IntegerToString::dec(int8_t(-123), buf), string_view("-123")); 39 EXPECT_EQ(*IntegerToString::dec(int8_t(INT8_MAX), buf), string_view("127")); 40 EXPECT_EQ(*IntegerToString::dec(int8_t(INT8_MIN), buf), string_view("-128")); 41 } 42 43 TEST(LlvmLibcIntegerToStringTest, UINT16) { 44 char buf[IntegerToString::dec_bufsize<uint16_t>()]; 45 EXPECT_EQ(*IntegerToString::dec(uint16_t(0), buf), string_view("0")); 46 EXPECT_EQ(*IntegerToString::dec(uint16_t(1), buf), string_view("1")); 47 EXPECT_EQ(*IntegerToString::dec(uint16_t(12), buf), string_view("12")); 48 EXPECT_EQ(*IntegerToString::dec(uint16_t(123), buf), string_view("123")); 49 EXPECT_EQ(*IntegerToString::dec(uint16_t(1234), buf), string_view("1234")); 50 EXPECT_EQ(*IntegerToString::dec(uint16_t(12345), buf), string_view("12345")); 51 EXPECT_EQ(*IntegerToString::dec(uint16_t(UINT16_MAX), buf), 52 string_view("65535")); 53 EXPECT_EQ(*IntegerToString::dec(uint16_t(-1), buf), string_view("65535")); 54 } 55 56 TEST(LlvmLibcIntegerToStringTest, INT16) { 57 char buf[IntegerToString::dec_bufsize<int16_t>()]; 58 EXPECT_EQ(*IntegerToString::dec(int16_t(0), buf), string_view("0")); 59 EXPECT_EQ(*IntegerToString::dec(int16_t(1), buf), string_view("1")); 60 EXPECT_EQ(*IntegerToString::dec(int16_t(12), buf), string_view("12")); 61 EXPECT_EQ(*IntegerToString::dec(int16_t(123), buf), string_view("123")); 62 EXPECT_EQ(*IntegerToString::dec(int16_t(1234), buf), string_view("1234")); 63 EXPECT_EQ(*IntegerToString::dec(int16_t(12345), buf), string_view("12345")); 64 EXPECT_EQ(*IntegerToString::dec(int16_t(-1), buf), string_view("-1")); 65 EXPECT_EQ(*IntegerToString::dec(int16_t(-12), buf), string_view("-12")); 66 EXPECT_EQ(*IntegerToString::dec(int16_t(-123), buf), string_view("-123")); 67 EXPECT_EQ(*IntegerToString::dec(int16_t(-1234), buf), string_view("-1234")); 68 EXPECT_EQ(*IntegerToString::dec(int16_t(-12345), buf), string_view("-12345")); 69 EXPECT_EQ(*IntegerToString::dec(int16_t(INT16_MAX), buf), 70 string_view("32767")); 71 EXPECT_EQ(*IntegerToString::dec(int16_t(INT16_MIN), buf), 72 string_view("-32768")); 73 } 74 75 TEST(LlvmLibcIntegerToStringTest, UINT32) { 76 char buf[IntegerToString::dec_bufsize<uint32_t>()]; 77 EXPECT_EQ(*IntegerToString::dec(uint32_t(0), buf), string_view("0")); 78 EXPECT_EQ(*IntegerToString::dec(uint32_t(1), buf), string_view("1")); 79 EXPECT_EQ(*IntegerToString::dec(uint32_t(12), buf), string_view("12")); 80 EXPECT_EQ(*IntegerToString::dec(uint32_t(123), buf), string_view("123")); 81 EXPECT_EQ(*IntegerToString::dec(uint32_t(1234), buf), string_view("1234")); 82 EXPECT_EQ(*IntegerToString::dec(uint32_t(12345), buf), string_view("12345")); 83 EXPECT_EQ(*IntegerToString::dec(uint32_t(123456), buf), string_view("123456")); 84 EXPECT_EQ(*IntegerToString::dec(uint32_t(1234567), buf), 85 string_view("1234567")); 86 EXPECT_EQ(*IntegerToString::dec(uint32_t(12345678), buf), 87 string_view("12345678")); 88 EXPECT_EQ(*IntegerToString::dec(uint32_t(123456789), buf), 89 string_view("123456789")); 90 EXPECT_EQ(*IntegerToString::dec(uint32_t(1234567890), buf), 91 string_view("1234567890")); 92 EXPECT_EQ(*IntegerToString::dec(uint32_t(UINT32_MAX), buf), 93 string_view("4294967295")); 94 EXPECT_EQ(*IntegerToString::dec(uint32_t(-1), buf), string_view("4294967295")); 95 } 96 97 TEST(LlvmLibcIntegerToStringTest, INT32) { 98 char buf[IntegerToString::dec_bufsize<int32_t>()]; 99 EXPECT_EQ(*IntegerToString::dec(int32_t(0), buf), string_view("0")); 100 EXPECT_EQ(*IntegerToString::dec(int32_t(1), buf), string_view("1")); 101 EXPECT_EQ(*IntegerToString::dec(int32_t(12), buf), string_view("12")); 102 EXPECT_EQ(*IntegerToString::dec(int32_t(123), buf), string_view("123")); 103 EXPECT_EQ(*IntegerToString::dec(int32_t(1234), buf), string_view("1234")); 104 EXPECT_EQ(*IntegerToString::dec(int32_t(12345), buf), string_view("12345")); 105 EXPECT_EQ(*IntegerToString::dec(int32_t(123456), buf), string_view("123456")); 106 EXPECT_EQ(*IntegerToString::dec(int32_t(1234567), buf), 107 string_view("1234567")); 108 EXPECT_EQ(*IntegerToString::dec(int32_t(12345678), buf), 109 string_view("12345678")); 110 EXPECT_EQ(*IntegerToString::dec(int32_t(123456789), buf), 111 string_view("123456789")); 112 EXPECT_EQ(*IntegerToString::dec(int32_t(1234567890), buf), 113 string_view("1234567890")); 114 EXPECT_EQ(*IntegerToString::dec(int32_t(-1), buf), string_view("-1")); 115 EXPECT_EQ(*IntegerToString::dec(int32_t(-12), buf), string_view("-12")); 116 EXPECT_EQ(*IntegerToString::dec(int32_t(-123), buf), string_view("-123")); 117 EXPECT_EQ(*IntegerToString::dec(int32_t(-1234), buf), string_view("-1234")); 118 EXPECT_EQ(*IntegerToString::dec(int32_t(-12345), buf), string_view("-12345")); 119 EXPECT_EQ(*IntegerToString::dec(int32_t(-123456), buf), 120 string_view("-123456")); 121 EXPECT_EQ(*IntegerToString::dec(int32_t(-1234567), buf), 122 string_view("-1234567")); 123 EXPECT_EQ(*IntegerToString::dec(int32_t(-12345678), buf), 124 string_view("-12345678")); 125 EXPECT_EQ(*IntegerToString::dec(int32_t(-123456789), buf), 126 string_view("-123456789")); 127 EXPECT_EQ(*IntegerToString::dec(int32_t(-1234567890), buf), 128 string_view("-1234567890")); 129 EXPECT_EQ(*IntegerToString::dec(int32_t(INT32_MAX), buf), 130 string_view("2147483647")); 131 EXPECT_EQ(*IntegerToString::dec(int32_t(INT32_MIN), buf), 132 string_view("-2147483648")); 133 } 134 135 TEST(LlvmLibcIntegerToStringTest, UINT64) { 136 char buf[IntegerToString::dec_bufsize<uint64_t>()]; 137 EXPECT_EQ(*IntegerToString::dec(uint64_t(0), buf), string_view("0")); 138 EXPECT_EQ(*IntegerToString::dec(uint64_t(1), buf), string_view("1")); 139 EXPECT_EQ(*IntegerToString::dec(uint64_t(12), buf), string_view("12")); 140 EXPECT_EQ(*IntegerToString::dec(uint64_t(123), buf), string_view("123")); 141 EXPECT_EQ(*IntegerToString::dec(uint64_t(1234), buf), string_view("1234")); 142 EXPECT_EQ(*IntegerToString::dec(uint64_t(12345), buf), string_view("12345")); 143 EXPECT_EQ(*IntegerToString::dec(uint64_t(123456), buf), string_view("123456")); 144 EXPECT_EQ(*IntegerToString::dec(uint64_t(1234567), buf), 145 string_view("1234567")); 146 EXPECT_EQ(*IntegerToString::dec(uint64_t(12345678), buf), 147 string_view("12345678")); 148 EXPECT_EQ(*IntegerToString::dec(uint64_t(123456789), buf), 149 string_view("123456789")); 150 EXPECT_EQ(*IntegerToString::dec(uint64_t(1234567890), buf), 151 string_view("1234567890")); 152 EXPECT_EQ(*IntegerToString::dec(uint64_t(1234567890123456789), buf), 153 string_view("1234567890123456789")); 154 EXPECT_EQ(*IntegerToString::dec(uint64_t(UINT64_MAX), buf), 155 string_view("18446744073709551615")); 156 EXPECT_EQ(*IntegerToString::dec(uint64_t(-1), buf), 157 string_view("18446744073709551615")); 158 } 159 160 TEST(LlvmLibcIntegerToStringTest, INT64) { 161 char buf[IntegerToString::dec_bufsize<int64_t>()]; 162 EXPECT_EQ(*IntegerToString::dec(int64_t(0), buf), string_view("0")); 163 EXPECT_EQ(*IntegerToString::dec(int64_t(1), buf), string_view("1")); 164 EXPECT_EQ(*IntegerToString::dec(int64_t(12), buf), string_view("12")); 165 EXPECT_EQ(*IntegerToString::dec(int64_t(123), buf), string_view("123")); 166 EXPECT_EQ(*IntegerToString::dec(int64_t(1234), buf), string_view("1234")); 167 EXPECT_EQ(*IntegerToString::dec(int64_t(12345), buf), string_view("12345")); 168 EXPECT_EQ(*IntegerToString::dec(int64_t(123456), buf), string_view("123456")); 169 EXPECT_EQ(*IntegerToString::dec(int64_t(1234567), buf), 170 string_view("1234567")); 171 EXPECT_EQ(*IntegerToString::dec(int64_t(12345678), buf), 172 string_view("12345678")); 173 EXPECT_EQ(*IntegerToString::dec(int64_t(123456789), buf), 174 string_view("123456789")); 175 EXPECT_EQ(*IntegerToString::dec(int64_t(1234567890), buf), 176 string_view("1234567890")); 177 EXPECT_EQ(*IntegerToString::dec(int64_t(1234567890123456789), buf), 178 string_view("1234567890123456789")); 179 EXPECT_EQ(*IntegerToString::dec(int64_t(-1), buf), string_view("-1")); 180 EXPECT_EQ(*IntegerToString::dec(int64_t(-12), buf), string_view("-12")); 181 EXPECT_EQ(*IntegerToString::dec(int64_t(-123), buf), string_view("-123")); 182 EXPECT_EQ(*IntegerToString::dec(int64_t(-1234), buf), string_view("-1234")); 183 EXPECT_EQ(*IntegerToString::dec(int64_t(-12345), buf), string_view("-12345")); 184 EXPECT_EQ(*IntegerToString::dec(int64_t(-123456), buf), 185 string_view("-123456")); 186 EXPECT_EQ(*IntegerToString::dec(int64_t(-1234567), buf), 187 string_view("-1234567")); 188 EXPECT_EQ(*IntegerToString::dec(int64_t(-12345678), buf), 189 string_view("-12345678")); 190 EXPECT_EQ(*IntegerToString::dec(int64_t(-123456789), buf), 191 string_view("-123456789")); 192 EXPECT_EQ(*IntegerToString::dec(int64_t(-1234567890), buf), 193 string_view("-1234567890")); 194 EXPECT_EQ(*IntegerToString::dec(int64_t(-1234567890123456789), buf), 195 string_view("-1234567890123456789")); 196 EXPECT_EQ(*IntegerToString::dec(int64_t(INT64_MAX), buf), 197 string_view("9223372036854775807")); 198 EXPECT_EQ(*IntegerToString::dec(int64_t(INT64_MIN), buf), 199 string_view("-9223372036854775808")); 200 } 201 202 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_8) { 203 char buf[IntegerToString::oct_bufsize<uint64_t>()]; 204 EXPECT_EQ((*IntegerToString::oct(uint64_t(0), buf)), string_view("0")); 205 EXPECT_EQ((*IntegerToString::oct(uint64_t(012345), buf)), 206 string_view("12345")); 207 EXPECT_EQ((*IntegerToString::oct(uint64_t(0123456701234567012345), buf)), 208 string_view("123456701234567012345")); 209 EXPECT_EQ((*IntegerToString::oct(uint64_t(01777777777777777777777), buf)), 210 string_view("1777777777777777777777")); 211 } 212 213 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_16) { 214 char buf[IntegerToString::hex_bufsize<uint64_t>()]; 215 EXPECT_EQ(*IntegerToString::hex(uint64_t(0), buf), string_view("0")); 216 EXPECT_EQ(*IntegerToString::hex(uint64_t(0x12345), buf), string_view("12345")); 217 EXPECT_EQ((*IntegerToString::hex(uint64_t(0x123456789abcdef), buf)), 218 string_view("123456789abcdef")); 219 EXPECT_EQ(*IntegerToString::hex(uint64_t(0x123456789abcdef), buf, false), 220 string_view("123456789ABCDEF")); 221 EXPECT_EQ(*IntegerToString::hex(uint64_t(0xffffffffffffffff), buf), 222 string_view("ffffffffffffffff")); 223 } 224 225 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_2) { 226 char buf[IntegerToString::bin_bufsize<uint64_t>()]; 227 EXPECT_EQ(*IntegerToString::bin(uint64_t(0), buf), string_view("0")); 228 EXPECT_EQ(*IntegerToString::bin(uint64_t(0xf0c), buf), 229 string_view("111100001100")); 230 EXPECT_EQ(*IntegerToString::bin(uint64_t(0x123abc), buf), 231 string_view("100100011101010111100")); 232 EXPECT_EQ( 233 *IntegerToString::bin(uint64_t(0xffffffffffffffff), buf), 234 string_view( 235 "1111111111111111111111111111111111111111111111111111111111111111")); 236 } 237 238 TEST(LlvmLibcIntegerToStringTest, UINT64_Base_36) { 239 char buf[IntegerToString::bufsize<36, uint64_t>()]; 240 EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(0), buf), string_view("0")); 241 EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(12345), buf), 242 string_view("9ix")); 243 EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(1047601316295595), buf), 244 string_view("abcdefghij")); 245 EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(2092218013456445), buf), 246 string_view("klmnopqrst")); 247 EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(1867590395), buf, false), 248 string_view("UVWXYZ")); 249 EXPECT_EQ(*IntegerToString::convert<36>(uint64_t(0xffffffffffffffff), buf), 250 string_view("3w5e11264sgsf")); 251 } 252 253 TEST(LlvmLibcIntegerToStringTest, UINT128_Base_16) { 254 char buf[IntegerToString::hex_bufsize<UInt128>()]; 255 EXPECT_EQ(*IntegerToString::hex(static_cast<UInt128>(0), buf), 256 string_view("00000000000000000000000000000000")); 257 EXPECT_EQ(*IntegerToString::hex(static_cast<UInt128>(0x12345), buf), 258 string_view("00000000000000000000000000012345")); 259 EXPECT_EQ((*IntegerToString::hex(static_cast<UInt128>(0x1234) << 112, buf)), 260 string_view("12340000000000000000000000000000")); 261 EXPECT_EQ((*IntegerToString::hex(static_cast<UInt128>(0x1234) << 48, buf)), 262 string_view("00000000000000001234000000000000")); 263 EXPECT_EQ((*IntegerToString::hex(static_cast<UInt128>(0x1234) << 52, buf)), 264 string_view("00000000000000012340000000000000")); 265 } 266 267 TEST(LlvmLibcIntegerToStringTest, UINT256_Base_16) { 268 using UInt256 = __llvm_libc::cpp::UInt<256>; 269 char buf[IntegerToString::hex_bufsize<UInt256>()]; 270 EXPECT_EQ( 271 *IntegerToString::hex(static_cast<UInt256>(0), buf), 272 string_view( 273 "0000000000000000000000000000000000000000000000000000000000000000")); 274 EXPECT_EQ( 275 *IntegerToString::hex(static_cast<UInt256>(0x12345), buf), 276 string_view( 277 "0000000000000000000000000000000000000000000000000000000000012345")); 278 EXPECT_EQ( 279 (*IntegerToString::hex(static_cast<UInt256>(0x1234) << 112, buf)), 280 string_view( 281 "0000000000000000000000000000000012340000000000000000000000000000")); 282 EXPECT_EQ( 283 (*IntegerToString::hex(static_cast<UInt256>(0x1234) << 116, buf)), 284 string_view( 285 "0000000000000000000000000000000123400000000000000000000000000000")); 286 EXPECT_EQ( 287 (*IntegerToString::hex(static_cast<UInt256>(0x1234) << 240, buf)), 288 string_view( 289 "1234000000000000000000000000000000000000000000000000000000000000")); 290 } 291