1eb0715e3SSiva Chandra Reddy //===-- Unittests for IntegerToString -------------------------------------===//
27c666c14SSiva Chandra Reddy //
37c666c14SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47c666c14SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
57c666c14SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67c666c14SSiva Chandra Reddy //
77c666c14SSiva Chandra Reddy //===----------------------------------------------------------------------===//
87c666c14SSiva Chandra Reddy
9bae47d48SNick Desaulniers #include "src/__support/CPP/limits.h"
10b555912eSGuillaume Chatelet #include "src/__support/CPP/span.h"
11aa59c981SGuillaume Chatelet #include "src/__support/CPP/string_view.h"
12*09efe848SGuillaume Chatelet #include "src/__support/big_int.h"
13a80a01fcSGuillaume Chatelet #include "src/__support/integer_literals.h"
147c666c14SSiva Chandra Reddy #include "src/__support/integer_to_string.h"
15*09efe848SGuillaume Chatelet #include "src/__support/uint128.h"
167c666c14SSiva Chandra Reddy
17af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
187c666c14SSiva Chandra Reddy
19b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::IntegerToString;
20b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::cpp::span;
21b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::cpp::string_view;
22b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::radix::Bin;
23b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::radix::Custom;
24b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::radix::Dec;
25b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::radix::Hex;
26b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::radix::Oct;
27a80a01fcSGuillaume Chatelet using LIBC_NAMESPACE::operator""_u128;
28a80a01fcSGuillaume Chatelet using LIBC_NAMESPACE::operator""_u256;
29b555912eSGuillaume Chatelet
30b555912eSGuillaume Chatelet #define EXPECT(type, value, string_value) \
31b555912eSGuillaume Chatelet { \
32b555912eSGuillaume Chatelet const type buffer(value); \
33b555912eSGuillaume Chatelet EXPECT_EQ(buffer.view(), string_view(string_value)); \
34b555912eSGuillaume Chatelet }
357c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,UINT8)367c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, UINT8) {
37b555912eSGuillaume Chatelet using type = IntegerToString<uint8_t>;
38b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
39b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
40b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
41b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
42b555912eSGuillaume Chatelet EXPECT(type, UINT8_MAX, "255");
43b555912eSGuillaume Chatelet EXPECT(type, -1, "255");
447c666c14SSiva Chandra Reddy }
457c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,INT8)467c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, INT8) {
47b555912eSGuillaume Chatelet using type = IntegerToString<int8_t>;
48b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
49b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
50b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
51b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
52b555912eSGuillaume Chatelet EXPECT(type, -12, "-12");
53b555912eSGuillaume Chatelet EXPECT(type, -123, "-123");
54b555912eSGuillaume Chatelet EXPECT(type, INT8_MAX, "127");
55b555912eSGuillaume Chatelet EXPECT(type, INT8_MIN, "-128");
567c666c14SSiva Chandra Reddy }
577c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,UINT16)587c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, UINT16) {
59b555912eSGuillaume Chatelet using type = IntegerToString<uint16_t>;
60b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
61b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
62b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
63b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
64b555912eSGuillaume Chatelet EXPECT(type, 1234, "1234");
65b555912eSGuillaume Chatelet EXPECT(type, 12345, "12345");
66b555912eSGuillaume Chatelet EXPECT(type, UINT16_MAX, "65535");
67b555912eSGuillaume Chatelet EXPECT(type, -1, "65535");
687c666c14SSiva Chandra Reddy }
697c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,INT16)707c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, INT16) {
71b555912eSGuillaume Chatelet using type = IntegerToString<int16_t>;
72b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
73b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
74b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
75b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
76b555912eSGuillaume Chatelet EXPECT(type, 1234, "1234");
77b555912eSGuillaume Chatelet EXPECT(type, 12345, "12345");
78b555912eSGuillaume Chatelet EXPECT(type, -1, "-1");
79b555912eSGuillaume Chatelet EXPECT(type, -12, "-12");
80b555912eSGuillaume Chatelet EXPECT(type, -123, "-123");
81b555912eSGuillaume Chatelet EXPECT(type, -1234, "-1234");
82b555912eSGuillaume Chatelet EXPECT(type, -12345, "-12345");
83b555912eSGuillaume Chatelet EXPECT(type, INT16_MAX, "32767");
84b555912eSGuillaume Chatelet EXPECT(type, INT16_MIN, "-32768");
857c666c14SSiva Chandra Reddy }
867c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,UINT32)877c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, UINT32) {
88b555912eSGuillaume Chatelet using type = IntegerToString<uint32_t>;
89b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
90b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
91b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
92b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
93b555912eSGuillaume Chatelet EXPECT(type, 1234, "1234");
94b555912eSGuillaume Chatelet EXPECT(type, 12345, "12345");
95b555912eSGuillaume Chatelet EXPECT(type, 123456, "123456");
96b555912eSGuillaume Chatelet EXPECT(type, 1234567, "1234567");
97b555912eSGuillaume Chatelet EXPECT(type, 12345678, "12345678");
98b555912eSGuillaume Chatelet EXPECT(type, 123456789, "123456789");
99b555912eSGuillaume Chatelet EXPECT(type, 1234567890, "1234567890");
100b555912eSGuillaume Chatelet EXPECT(type, UINT32_MAX, "4294967295");
101b555912eSGuillaume Chatelet EXPECT(type, -1, "4294967295");
1027c666c14SSiva Chandra Reddy }
1037c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,INT32)1047c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, INT32) {
105b555912eSGuillaume Chatelet using type = IntegerToString<int32_t>;
106b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
107b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
108b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
109b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
110b555912eSGuillaume Chatelet EXPECT(type, 1234, "1234");
111b555912eSGuillaume Chatelet EXPECT(type, 12345, "12345");
112b555912eSGuillaume Chatelet EXPECT(type, 123456, "123456");
113b555912eSGuillaume Chatelet EXPECT(type, 1234567, "1234567");
114b555912eSGuillaume Chatelet EXPECT(type, 12345678, "12345678");
115b555912eSGuillaume Chatelet EXPECT(type, 123456789, "123456789");
116b555912eSGuillaume Chatelet EXPECT(type, 1234567890, "1234567890");
117b555912eSGuillaume Chatelet EXPECT(type, -1, "-1");
118b555912eSGuillaume Chatelet EXPECT(type, -12, "-12");
119b555912eSGuillaume Chatelet EXPECT(type, -123, "-123");
120b555912eSGuillaume Chatelet EXPECT(type, -1234, "-1234");
121b555912eSGuillaume Chatelet EXPECT(type, -12345, "-12345");
122b555912eSGuillaume Chatelet EXPECT(type, -123456, "-123456");
123b555912eSGuillaume Chatelet EXPECT(type, -1234567, "-1234567");
124b555912eSGuillaume Chatelet EXPECT(type, -12345678, "-12345678");
125b555912eSGuillaume Chatelet EXPECT(type, -123456789, "-123456789");
126b555912eSGuillaume Chatelet EXPECT(type, -1234567890, "-1234567890");
127b555912eSGuillaume Chatelet EXPECT(type, INT32_MAX, "2147483647");
128b555912eSGuillaume Chatelet EXPECT(type, INT32_MIN, "-2147483648");
1297c666c14SSiva Chandra Reddy }
1307c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,UINT64)1317c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, UINT64) {
132b555912eSGuillaume Chatelet using type = IntegerToString<uint64_t>;
133b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
134b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
135b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
136b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
137b555912eSGuillaume Chatelet EXPECT(type, 1234, "1234");
138b555912eSGuillaume Chatelet EXPECT(type, 12345, "12345");
139b555912eSGuillaume Chatelet EXPECT(type, 123456, "123456");
140b555912eSGuillaume Chatelet EXPECT(type, 1234567, "1234567");
141b555912eSGuillaume Chatelet EXPECT(type, 12345678, "12345678");
142b555912eSGuillaume Chatelet EXPECT(type, 123456789, "123456789");
143b555912eSGuillaume Chatelet EXPECT(type, 1234567890, "1234567890");
144b555912eSGuillaume Chatelet EXPECT(type, 1234567890123456789, "1234567890123456789");
145b555912eSGuillaume Chatelet EXPECT(type, UINT64_MAX, "18446744073709551615");
146b555912eSGuillaume Chatelet EXPECT(type, -1, "18446744073709551615");
1477c666c14SSiva Chandra Reddy }
1487c666c14SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,INT64)1497c666c14SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, INT64) {
150b555912eSGuillaume Chatelet using type = IntegerToString<int64_t>;
151b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
152b555912eSGuillaume Chatelet EXPECT(type, 1, "1");
153b555912eSGuillaume Chatelet EXPECT(type, 12, "12");
154b555912eSGuillaume Chatelet EXPECT(type, 123, "123");
155b555912eSGuillaume Chatelet EXPECT(type, 1234, "1234");
156b555912eSGuillaume Chatelet EXPECT(type, 12345, "12345");
157b555912eSGuillaume Chatelet EXPECT(type, 123456, "123456");
158b555912eSGuillaume Chatelet EXPECT(type, 1234567, "1234567");
159b555912eSGuillaume Chatelet EXPECT(type, 12345678, "12345678");
160b555912eSGuillaume Chatelet EXPECT(type, 123456789, "123456789");
161b555912eSGuillaume Chatelet EXPECT(type, 1234567890, "1234567890");
162b555912eSGuillaume Chatelet EXPECT(type, 1234567890123456789, "1234567890123456789");
163b555912eSGuillaume Chatelet EXPECT(type, -1, "-1");
164b555912eSGuillaume Chatelet EXPECT(type, -12, "-12");
165b555912eSGuillaume Chatelet EXPECT(type, -123, "-123");
166b555912eSGuillaume Chatelet EXPECT(type, -1234, "-1234");
167b555912eSGuillaume Chatelet EXPECT(type, -12345, "-12345");
168b555912eSGuillaume Chatelet EXPECT(type, -123456, "-123456");
169b555912eSGuillaume Chatelet EXPECT(type, -1234567, "-1234567");
170b555912eSGuillaume Chatelet EXPECT(type, -12345678, "-12345678");
171b555912eSGuillaume Chatelet EXPECT(type, -123456789, "-123456789");
172b555912eSGuillaume Chatelet EXPECT(type, -1234567890, "-1234567890");
173b555912eSGuillaume Chatelet EXPECT(type, -1234567890123456789, "-1234567890123456789");
174b555912eSGuillaume Chatelet EXPECT(type, INT64_MAX, "9223372036854775807");
175b555912eSGuillaume Chatelet EXPECT(type, INT64_MIN, "-9223372036854775808");
17623ace05eSMichael Jones }
17723ace05eSMichael Jones
TEST(LlvmLibcIntegerToStringTest,UINT64_Base_8)17823ace05eSMichael Jones TEST(LlvmLibcIntegerToStringTest, UINT64_Base_8) {
179b555912eSGuillaume Chatelet using type = IntegerToString<int64_t, Oct>;
180b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
181b555912eSGuillaume Chatelet EXPECT(type, 012345, "12345");
182b555912eSGuillaume Chatelet EXPECT(type, 0123456701234567012345, "123456701234567012345");
183b555912eSGuillaume Chatelet EXPECT(type, 01777777777777777777777, "1777777777777777777777");
18423ace05eSMichael Jones }
18523ace05eSMichael Jones
TEST(LlvmLibcIntegerToStringTest,UINT64_Base_16)18623ace05eSMichael Jones TEST(LlvmLibcIntegerToStringTest, UINT64_Base_16) {
187b555912eSGuillaume Chatelet using type = IntegerToString<uint64_t, Hex>;
188b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
189b555912eSGuillaume Chatelet EXPECT(type, 0x12345, "12345");
190b555912eSGuillaume Chatelet EXPECT(type, 0x123456789abcdef, "123456789abcdef");
191b555912eSGuillaume Chatelet EXPECT(type, 0xffffffffffffffff, "ffffffffffffffff");
192b555912eSGuillaume Chatelet using TYPE = IntegerToString<uint64_t, Hex::Uppercase>;
193b555912eSGuillaume Chatelet EXPECT(TYPE, 0x123456789abcdef, "123456789ABCDEF");
19423ace05eSMichael Jones }
19523ace05eSMichael Jones
TEST(LlvmLibcIntegerToStringTest,UINT64_Base_2)19623ace05eSMichael Jones TEST(LlvmLibcIntegerToStringTest, UINT64_Base_2) {
197b555912eSGuillaume Chatelet using type = IntegerToString<uint64_t, Bin>;
198b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
199b555912eSGuillaume Chatelet EXPECT(type, 0b111100001100, "111100001100");
200b555912eSGuillaume Chatelet EXPECT(type, 0b100100011101010111100, "100100011101010111100");
201b555912eSGuillaume Chatelet EXPECT(type, 0xffffffffffffffff,
202b555912eSGuillaume Chatelet "1111111111111111111111111111111111111111111111111111111111111111");
20398ab87f4SGuillaume Chatelet }
204910cc05aSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,UINT128_Base_16)20598ab87f4SGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, UINT128_Base_16) {
206b555912eSGuillaume Chatelet using type = IntegerToString<UInt128, Hex::WithWidth<32>>;
207b555912eSGuillaume Chatelet EXPECT(type, 0, "00000000000000000000000000000000");
208b555912eSGuillaume Chatelet EXPECT(type, 0x12345, "00000000000000000000000000012345");
209a80a01fcSGuillaume Chatelet EXPECT(type, 0x12340000'00000000'00000000'00000000_u128,
210b555912eSGuillaume Chatelet "12340000000000000000000000000000");
211a80a01fcSGuillaume Chatelet EXPECT(type, 0x00000000'00000000'12340000'00000000_u128,
212b555912eSGuillaume Chatelet "00000000000000001234000000000000");
213a80a01fcSGuillaume Chatelet EXPECT(type, 0x00000000'00000001'23400000'00000000_u128,
214b555912eSGuillaume Chatelet "00000000000000012340000000000000");
215b555912eSGuillaume Chatelet }
216b555912eSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,UINT64_Base_36)217b555912eSGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, UINT64_Base_36) {
218b555912eSGuillaume Chatelet using type = IntegerToString<uint64_t, Custom<36>>;
219b555912eSGuillaume Chatelet EXPECT(type, 0, "0");
220b555912eSGuillaume Chatelet EXPECT(type, 12345, "9ix");
221b555912eSGuillaume Chatelet EXPECT(type, 1047601316295595, "abcdefghij");
222b555912eSGuillaume Chatelet EXPECT(type, 2092218013456445, "klmnopqrst");
223b555912eSGuillaume Chatelet EXPECT(type, 0xffffffffffffffff, "3w5e11264sgsf");
224b555912eSGuillaume Chatelet
225b555912eSGuillaume Chatelet using TYPE = IntegerToString<uint64_t, Custom<36>::Uppercase>;
226b555912eSGuillaume Chatelet EXPECT(TYPE, 1867590395, "UVWXYZ");
227625d6928SSiva Chandra Reddy }
228625d6928SSiva Chandra Reddy
TEST(LlvmLibcIntegerToStringTest,UINT256_Base_16)229625d6928SSiva Chandra Reddy TEST(LlvmLibcIntegerToStringTest, UINT256_Base_16) {
2306a8e6c9aSGuillaume Chatelet using UInt256 = LIBC_NAMESPACE::UInt<256>;
231b555912eSGuillaume Chatelet using type = IntegerToString<UInt256, Hex::WithWidth<64>>;
232a80a01fcSGuillaume Chatelet EXPECT(
233a80a01fcSGuillaume Chatelet type,
234a80a01fcSGuillaume Chatelet 0x0000000000000000000000000000000000000000000000000000000000000000_u256,
235b555912eSGuillaume Chatelet "0000000000000000000000000000000000000000000000000000000000000000");
236a80a01fcSGuillaume Chatelet EXPECT(
237a80a01fcSGuillaume Chatelet type,
238a80a01fcSGuillaume Chatelet 0x0000000000000000000000000000000000000000000000000000000000012345_u256,
239b555912eSGuillaume Chatelet "0000000000000000000000000000000000000000000000000000000000012345");
240a80a01fcSGuillaume Chatelet EXPECT(
241a80a01fcSGuillaume Chatelet type,
242a80a01fcSGuillaume Chatelet 0x0000000000000000000000000000000012340000000000000000000000000000_u256,
243b555912eSGuillaume Chatelet "0000000000000000000000000000000012340000000000000000000000000000");
244a80a01fcSGuillaume Chatelet EXPECT(
245a80a01fcSGuillaume Chatelet type,
246a80a01fcSGuillaume Chatelet 0x0000000000000000000000000000000123400000000000000000000000000000_u256,
247b555912eSGuillaume Chatelet "0000000000000000000000000000000123400000000000000000000000000000");
248a80a01fcSGuillaume Chatelet EXPECT(
249a80a01fcSGuillaume Chatelet type,
250a80a01fcSGuillaume Chatelet 0x1234000000000000000000000000000000000000000000000000000000000000_u256,
251b555912eSGuillaume Chatelet "1234000000000000000000000000000000000000000000000000000000000000");
252b555912eSGuillaume Chatelet }
253b555912eSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,NegativeInterpretedAsPositive)254b555912eSGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, NegativeInterpretedAsPositive) {
255b555912eSGuillaume Chatelet using BIN = IntegerToString<int8_t, Bin>;
256b555912eSGuillaume Chatelet using OCT = IntegerToString<int8_t, Oct>;
257b555912eSGuillaume Chatelet using DEC = IntegerToString<int8_t, Dec>;
258b555912eSGuillaume Chatelet using HEX = IntegerToString<int8_t, Hex>;
259b555912eSGuillaume Chatelet EXPECT(BIN, -1, "11111111");
260b555912eSGuillaume Chatelet EXPECT(OCT, -1, "377");
261b555912eSGuillaume Chatelet EXPECT(DEC, -1, "-1"); // Only DEC format negative values
262b555912eSGuillaume Chatelet EXPECT(HEX, -1, "ff");
263b555912eSGuillaume Chatelet }
264b555912eSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,Width)265b555912eSGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, Width) {
266b555912eSGuillaume Chatelet using BIN = IntegerToString<uint8_t, Bin::WithWidth<4>>;
267b555912eSGuillaume Chatelet using OCT = IntegerToString<uint8_t, Oct::WithWidth<4>>;
268b555912eSGuillaume Chatelet using DEC = IntegerToString<uint8_t, Dec::WithWidth<4>>;
269b555912eSGuillaume Chatelet using HEX = IntegerToString<uint8_t, Hex::WithWidth<4>>;
270b555912eSGuillaume Chatelet EXPECT(BIN, 1, "0001");
271b555912eSGuillaume Chatelet EXPECT(HEX, 1, "0001");
272b555912eSGuillaume Chatelet EXPECT(OCT, 1, "0001");
273b555912eSGuillaume Chatelet EXPECT(DEC, 1, "0001");
274b555912eSGuillaume Chatelet }
275b555912eSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,Prefix)276b555912eSGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, Prefix) {
277b555912eSGuillaume Chatelet // WithPrefix is not supported for Decimal
278b555912eSGuillaume Chatelet using BIN = IntegerToString<uint8_t, Bin::WithPrefix>;
279b555912eSGuillaume Chatelet using OCT = IntegerToString<uint8_t, Oct::WithPrefix>;
280b555912eSGuillaume Chatelet using HEX = IntegerToString<uint8_t, Hex::WithPrefix>;
281b555912eSGuillaume Chatelet EXPECT(BIN, 1, "0b1");
282b555912eSGuillaume Chatelet EXPECT(HEX, 1, "0x1");
283b555912eSGuillaume Chatelet EXPECT(OCT, 1, "01");
284b555912eSGuillaume Chatelet EXPECT(OCT, 0, "0"); // Zero is not prefixed for octal
285b555912eSGuillaume Chatelet }
286b555912eSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,Uppercase)287b555912eSGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, Uppercase) {
288b555912eSGuillaume Chatelet using HEX = IntegerToString<uint64_t, Hex::Uppercase>;
289b555912eSGuillaume Chatelet EXPECT(HEX, 0xDEADC0DE, "DEADC0DE");
290b555912eSGuillaume Chatelet }
291b555912eSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,Sign)292b555912eSGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, Sign) {
293b555912eSGuillaume Chatelet // WithSign only compiles with DEC
294b555912eSGuillaume Chatelet using DEC = IntegerToString<int8_t, Dec::WithSign>;
295b555912eSGuillaume Chatelet EXPECT(DEC, -1, "-1");
296b555912eSGuillaume Chatelet EXPECT(DEC, 0, "+0");
297b555912eSGuillaume Chatelet EXPECT(DEC, 1, "+1");
298b555912eSGuillaume Chatelet }
299b555912eSGuillaume Chatelet
TEST(LlvmLibcIntegerToStringTest,BufferOverrun)300b555912eSGuillaume Chatelet TEST(LlvmLibcIntegerToStringTest, BufferOverrun) {
301b555912eSGuillaume Chatelet { // Writing '0' in an empty buffer requiring zero digits : works
302b555912eSGuillaume Chatelet const auto view =
303b555912eSGuillaume Chatelet IntegerToString<int, Dec::WithWidth<0>>::format_to(span<char>(), 0);
304b555912eSGuillaume Chatelet ASSERT_TRUE(view.has_value());
305b555912eSGuillaume Chatelet ASSERT_EQ(*view, string_view(""));
306b555912eSGuillaume Chatelet }
307b555912eSGuillaume Chatelet char buffer[1];
308b555912eSGuillaume Chatelet { // Writing '1' in a buffer of one char : works
309b555912eSGuillaume Chatelet const auto view = IntegerToString<int>::format_to(buffer, 1);
310b555912eSGuillaume Chatelet ASSERT_TRUE(view.has_value());
311b555912eSGuillaume Chatelet ASSERT_EQ(*view, string_view("1"));
312b555912eSGuillaume Chatelet }
313b555912eSGuillaume Chatelet { // Writing '11' in a buffer of one char : fails
314b555912eSGuillaume Chatelet const auto view = IntegerToString<int>::format_to(buffer, 11);
315b555912eSGuillaume Chatelet ASSERT_FALSE(view.has_value());
316b555912eSGuillaume Chatelet }
317625d6928SSiva Chandra Reddy }
318