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