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