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