xref: /llvm-project/libc/test/src/__support/integer_to_string_test.cpp (revision 23ace05e0a7aa8d47da60e6baa4ad6a2d68a83c8)
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