10e31a384SZachary Turner //===- StringExtrasTest.cpp - Unit tests for String extras ----------------===//
20e31a384SZachary Turner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60e31a384SZachary Turner //
70e31a384SZachary Turner //===----------------------------------------------------------------------===//
80e31a384SZachary Turner 
90e31a384SZachary Turner #include "llvm/ADT/StringExtras.h"
1014bd3b9fSFrancis Visoiu Mistrih #include "llvm/Support/raw_ostream.h"
1166e06cc8SMichał Górny #include "gmock/gmock.h"
120e31a384SZachary Turner #include "gtest/gtest.h"
130e31a384SZachary Turner 
140e31a384SZachary Turner using namespace llvm;
150e31a384SZachary Turner 
TEST(StringExtrasTest,isPrint)166f1da6e3SMichael Kruse TEST(StringExtrasTest, isPrint) {
176f1da6e3SMichael Kruse   EXPECT_FALSE(isPrint('\0'));
186f1da6e3SMichael Kruse   EXPECT_FALSE(isPrint('\t'));
196f1da6e3SMichael Kruse   EXPECT_TRUE(isPrint('0'));
206f1da6e3SMichael Kruse   EXPECT_TRUE(isPrint('a'));
216f1da6e3SMichael Kruse   EXPECT_TRUE(isPrint('A'));
226f1da6e3SMichael Kruse   EXPECT_TRUE(isPrint(' '));
236f1da6e3SMichael Kruse   EXPECT_TRUE(isPrint('~'));
246f1da6e3SMichael Kruse   EXPECT_TRUE(isPrint('?'));
256f1da6e3SMichael Kruse }
266f1da6e3SMichael Kruse 
TEST(StringExtrasTest,isSpace)27b283ae7aSSam McCall TEST(StringExtrasTest, isSpace) {
28b283ae7aSSam McCall   EXPECT_TRUE(isSpace(' '));
29b283ae7aSSam McCall   EXPECT_TRUE(isSpace('\t'));
30b283ae7aSSam McCall   EXPECT_TRUE(isSpace('\n'));
31b283ae7aSSam McCall   EXPECT_TRUE(isSpace('\v'));
32b283ae7aSSam McCall   EXPECT_TRUE(isSpace('\f'));
33b283ae7aSSam McCall   EXPECT_TRUE(isSpace('\v'));
34b283ae7aSSam McCall   EXPECT_FALSE(isSpace('\0'));
35b283ae7aSSam McCall   EXPECT_FALSE(isSpace('_'));
36b283ae7aSSam McCall }
37b283ae7aSSam McCall 
TEST(StringExtrasTest,Join)380e31a384SZachary Turner TEST(StringExtrasTest, Join) {
390e31a384SZachary Turner   std::vector<std::string> Items;
400e31a384SZachary Turner   EXPECT_EQ("", join(Items.begin(), Items.end(), " <sep> "));
410e31a384SZachary Turner 
420e31a384SZachary Turner   Items = {"foo"};
430e31a384SZachary Turner   EXPECT_EQ("foo", join(Items.begin(), Items.end(), " <sep> "));
440e31a384SZachary Turner 
450e31a384SZachary Turner   Items = {"foo", "bar"};
460e31a384SZachary Turner   EXPECT_EQ("foo <sep> bar", join(Items.begin(), Items.end(), " <sep> "));
470e31a384SZachary Turner 
480e31a384SZachary Turner   Items = {"foo", "bar", "baz"};
490e31a384SZachary Turner   EXPECT_EQ("foo <sep> bar <sep> baz",
500e31a384SZachary Turner             join(Items.begin(), Items.end(), " <sep> "));
510e31a384SZachary Turner }
520e31a384SZachary Turner 
TEST(StringExtrasTest,JoinItems)530e31a384SZachary Turner TEST(StringExtrasTest, JoinItems) {
540e31a384SZachary Turner   const char *Foo = "foo";
550e31a384SZachary Turner   std::string Bar = "bar";
560e31a384SZachary Turner   llvm::StringRef Baz = "baz";
570e31a384SZachary Turner   char X = 'x';
580e31a384SZachary Turner 
590e31a384SZachary Turner   EXPECT_EQ("", join_items(" <sep> "));
600e31a384SZachary Turner   EXPECT_EQ("", join_items('/'));
610e31a384SZachary Turner 
620e31a384SZachary Turner   EXPECT_EQ("foo", join_items(" <sep> ", Foo));
630e31a384SZachary Turner   EXPECT_EQ("foo", join_items('/', Foo));
640e31a384SZachary Turner 
650e31a384SZachary Turner   EXPECT_EQ("foo <sep> bar", join_items(" <sep> ", Foo, Bar));
660e31a384SZachary Turner   EXPECT_EQ("foo/bar", join_items('/', Foo, Bar));
670e31a384SZachary Turner 
680e31a384SZachary Turner   EXPECT_EQ("foo <sep> bar <sep> baz", join_items(" <sep> ", Foo, Bar, Baz));
690e31a384SZachary Turner   EXPECT_EQ("foo/bar/baz", join_items('/', Foo, Bar, Baz));
700e31a384SZachary Turner 
710e31a384SZachary Turner   EXPECT_EQ("foo <sep> bar <sep> baz <sep> x",
720e31a384SZachary Turner             join_items(" <sep> ", Foo, Bar, Baz, X));
730e31a384SZachary Turner 
740e31a384SZachary Turner   EXPECT_EQ("foo/bar/baz/x", join_items('/', Foo, Bar, Baz, X));
750e31a384SZachary Turner }
76e46b4498SZachary Turner 
TEST(StringExtrasTest,ToAndFromHex)77e46b4498SZachary Turner TEST(StringExtrasTest, ToAndFromHex) {
78e46b4498SZachary Turner   std::vector<uint8_t> OddBytes = {0x5, 0xBD, 0x0D, 0x3E, 0xCD};
79e46b4498SZachary Turner   std::string OddStr = "05BD0D3ECD";
80e46b4498SZachary Turner   StringRef OddData(reinterpret_cast<const char *>(OddBytes.data()),
81e46b4498SZachary Turner                     OddBytes.size());
82e46b4498SZachary Turner   EXPECT_EQ(OddStr, toHex(OddData));
83e46b4498SZachary Turner   EXPECT_EQ(OddData, fromHex(StringRef(OddStr).drop_front()));
8472dc29a8SPetr Hosek   EXPECT_EQ(StringRef(OddStr).lower(), toHex(OddData, true));
85e46b4498SZachary Turner 
86e46b4498SZachary Turner   std::vector<uint8_t> EvenBytes = {0xA5, 0xBD, 0x0D, 0x3E, 0xCD};
87e46b4498SZachary Turner   std::string EvenStr = "A5BD0D3ECD";
88e46b4498SZachary Turner   StringRef EvenData(reinterpret_cast<const char *>(EvenBytes.data()),
89e46b4498SZachary Turner                      EvenBytes.size());
90e46b4498SZachary Turner   EXPECT_EQ(EvenStr, toHex(EvenData));
91e46b4498SZachary Turner   EXPECT_EQ(EvenData, fromHex(EvenStr));
9272dc29a8SPetr Hosek   EXPECT_EQ(StringRef(EvenStr).lower(), toHex(EvenData, true));
931095419bSRiver Riddle 
942fcffcd0SBen Vanik   std::string InvalidStr = "A50\xFF";
951095419bSRiver Riddle   std::string IgnoredOutput;
961095419bSRiver Riddle   EXPECT_FALSE(tryGetFromHex(InvalidStr, IgnoredOutput));
97e46b4498SZachary Turner }
98ec000f42SPavel Labath 
TEST(StringExtrasTest,UINT64ToHex)99*a41c8b8fSYuanfang Chen TEST(StringExtrasTest, UINT64ToHex) {
100*a41c8b8fSYuanfang Chen   EXPECT_EQ(utohexstr(0xA0u), "A0");
101*a41c8b8fSYuanfang Chen   EXPECT_EQ(utohexstr(0xA0u, false, 4), "00A0");
102*a41c8b8fSYuanfang Chen   EXPECT_EQ(utohexstr(0xA0u, false, 8), "000000A0");
103*a41c8b8fSYuanfang Chen }
104*a41c8b8fSYuanfang Chen 
TEST(StringExtrasTest,to_float)105ec000f42SPavel Labath TEST(StringExtrasTest, to_float) {
106ec000f42SPavel Labath   float F;
107ec000f42SPavel Labath   EXPECT_TRUE(to_float("4.7", F));
108171ba4a6SSimon Pilgrim   EXPECT_FLOAT_EQ(4.7f, F);
109ec000f42SPavel Labath 
110ec000f42SPavel Labath   double D;
111ec000f42SPavel Labath   EXPECT_TRUE(to_float("4.7", D));
112ec000f42SPavel Labath   EXPECT_DOUBLE_EQ(4.7, D);
113ec000f42SPavel Labath 
114ec000f42SPavel Labath   long double LD;
115ec000f42SPavel Labath   EXPECT_TRUE(to_float("4.7", LD));
116ec000f42SPavel Labath   EXPECT_DOUBLE_EQ(4.7, LD);
117ec000f42SPavel Labath 
118ec000f42SPavel Labath   EXPECT_FALSE(to_float("foo", F));
119ec000f42SPavel Labath   EXPECT_FALSE(to_float("7.4 foo", F));
120171ba4a6SSimon Pilgrim   EXPECT_FLOAT_EQ(4.7f, F); // F should be unchanged
121ec000f42SPavel Labath }
12214bd3b9fSFrancis Visoiu Mistrih 
TEST(StringExtrasTest,printLowerCase)12314bd3b9fSFrancis Visoiu Mistrih TEST(StringExtrasTest, printLowerCase) {
12414bd3b9fSFrancis Visoiu Mistrih   std::string str;
12514bd3b9fSFrancis Visoiu Mistrih   raw_string_ostream OS(str);
12614bd3b9fSFrancis Visoiu Mistrih   printLowerCase("ABCdefg01234.,&!~`'}\"", OS);
12714bd3b9fSFrancis Visoiu Mistrih   EXPECT_EQ("abcdefg01234.,&!~`'}\"", OS.str());
12814bd3b9fSFrancis Visoiu Mistrih }
12950603518SJonas Devlieghere 
TEST(StringExtrasTest,printEscapedString)1306f1da6e3SMichael Kruse TEST(StringExtrasTest, printEscapedString) {
1316f1da6e3SMichael Kruse   std::string str;
1326f1da6e3SMichael Kruse   raw_string_ostream OS(str);
1336f1da6e3SMichael Kruse   printEscapedString("ABCdef123&<>\\\"'\t", OS);
13467d440b9SReid Kleckner   EXPECT_EQ("ABCdef123&<>\\\\\\22'\\09", OS.str());
1356f1da6e3SMichael Kruse }
1366f1da6e3SMichael Kruse 
TEST(StringExtrasTest,printHTMLEscaped)137745918ffSJonas Devlieghere TEST(StringExtrasTest, printHTMLEscaped) {
13850603518SJonas Devlieghere   std::string str;
13950603518SJonas Devlieghere   raw_string_ostream OS(str);
140745918ffSJonas Devlieghere   printHTMLEscaped("ABCdef123&<>\"'", OS);
14150603518SJonas Devlieghere   EXPECT_EQ("ABCdef123&amp;&lt;&gt;&quot;&apos;", OS.str());
14250603518SJonas Devlieghere }
143229e392bSRiver Riddle 
TEST(StringExtrasTest,ConvertToSnakeFromCamelCase)144955d8899SSimon Pilgrim TEST(StringExtrasTest, ConvertToSnakeFromCamelCase) {
145229e392bSRiver Riddle   auto testConvertToSnakeCase = [](llvm::StringRef input,
146229e392bSRiver Riddle                                    llvm::StringRef expected) {
147229e392bSRiver Riddle     EXPECT_EQ(convertToSnakeFromCamelCase(input), expected.str());
148229e392bSRiver Riddle   };
149229e392bSRiver Riddle 
150229e392bSRiver Riddle   testConvertToSnakeCase("OpName", "op_name");
151229e392bSRiver Riddle   testConvertToSnakeCase("opName", "op_name");
152229e392bSRiver Riddle   testConvertToSnakeCase("_OpName", "_op_name");
153229e392bSRiver Riddle   testConvertToSnakeCase("Op_Name", "op_name");
154229e392bSRiver Riddle   testConvertToSnakeCase("", "");
155229e392bSRiver Riddle   testConvertToSnakeCase("A", "a");
156229e392bSRiver Riddle   testConvertToSnakeCase("_", "_");
157229e392bSRiver Riddle   testConvertToSnakeCase("a", "a");
158229e392bSRiver Riddle   testConvertToSnakeCase("op_name", "op_name");
159229e392bSRiver Riddle   testConvertToSnakeCase("_op_name", "_op_name");
160229e392bSRiver Riddle   testConvertToSnakeCase("__op_name", "__op_name");
161229e392bSRiver Riddle   testConvertToSnakeCase("op__name", "op__name");
162229e392bSRiver Riddle }
163229e392bSRiver Riddle 
TEST(StringExtrasTest,ConvertToCamelFromSnakeCase)164955d8899SSimon Pilgrim TEST(StringExtrasTest, ConvertToCamelFromSnakeCase) {
165229e392bSRiver Riddle   auto testConvertToCamelCase = [](bool capitalizeFirst, llvm::StringRef input,
166229e392bSRiver Riddle                                    llvm::StringRef expected) {
167229e392bSRiver Riddle     EXPECT_EQ(convertToCamelFromSnakeCase(input, capitalizeFirst),
168229e392bSRiver Riddle               expected.str());
169229e392bSRiver Riddle   };
170229e392bSRiver Riddle 
171229e392bSRiver Riddle   testConvertToCamelCase(false, "op_name", "opName");
172229e392bSRiver Riddle   testConvertToCamelCase(false, "_op_name", "_opName");
173229e392bSRiver Riddle   testConvertToCamelCase(false, "__op_name", "_OpName");
174229e392bSRiver Riddle   testConvertToCamelCase(false, "op__name", "op_Name");
175229e392bSRiver Riddle   testConvertToCamelCase(false, "", "");
176229e392bSRiver Riddle   testConvertToCamelCase(false, "A", "A");
177229e392bSRiver Riddle   testConvertToCamelCase(false, "_", "_");
178229e392bSRiver Riddle   testConvertToCamelCase(false, "a", "a");
179229e392bSRiver Riddle   testConvertToCamelCase(false, "OpName", "OpName");
180229e392bSRiver Riddle   testConvertToCamelCase(false, "opName", "opName");
181229e392bSRiver Riddle   testConvertToCamelCase(false, "_OpName", "_OpName");
182229e392bSRiver Riddle   testConvertToCamelCase(false, "Op_Name", "Op_Name");
183229e392bSRiver Riddle   testConvertToCamelCase(true, "op_name", "OpName");
184229e392bSRiver Riddle   testConvertToCamelCase(true, "_op_name", "_opName");
185229e392bSRiver Riddle   testConvertToCamelCase(true, "__op_name", "_OpName");
186229e392bSRiver Riddle   testConvertToCamelCase(true, "op__name", "Op_Name");
187229e392bSRiver Riddle   testConvertToCamelCase(true, "", "");
188229e392bSRiver Riddle   testConvertToCamelCase(true, "A", "A");
189229e392bSRiver Riddle   testConvertToCamelCase(true, "_", "_");
190229e392bSRiver Riddle   testConvertToCamelCase(true, "a", "A");
191229e392bSRiver Riddle   testConvertToCamelCase(true, "OpName", "OpName");
192229e392bSRiver Riddle   testConvertToCamelCase(true, "_OpName", "_OpName");
193229e392bSRiver Riddle   testConvertToCamelCase(true, "Op_Name", "Op_Name");
194229e392bSRiver Riddle   testConvertToCamelCase(true, "opName", "OpName");
195229e392bSRiver Riddle }
1968ca7d2a1SThomas Preud'homme 
1978ca7d2a1SThomas Preud'homme constexpr uint64_t MaxUint64 = std::numeric_limits<uint64_t>::max();
1988ca7d2a1SThomas Preud'homme constexpr int64_t MaxInt64 = std::numeric_limits<int64_t>::max();
1998ca7d2a1SThomas Preud'homme constexpr int64_t MinInt64 = std::numeric_limits<int64_t>::min();
2008ca7d2a1SThomas Preud'homme 
TEST(StringExtrasTest,UToStr)201955d8899SSimon Pilgrim TEST(StringExtrasTest, UToStr) {
2028ca7d2a1SThomas Preud'homme   EXPECT_EQ("0", utostr(0));
2038ca7d2a1SThomas Preud'homme   EXPECT_EQ("0", utostr(0, /*isNeg=*/false));
2048ca7d2a1SThomas Preud'homme   EXPECT_EQ("1", utostr(1));
2058ca7d2a1SThomas Preud'homme   EXPECT_EQ("1", utostr(1, /*isNeg=*/false));
2068ca7d2a1SThomas Preud'homme   EXPECT_EQ(std::to_string(MaxUint64), utostr(MaxUint64));
2078ca7d2a1SThomas Preud'homme   EXPECT_EQ(std::to_string(MaxUint64), utostr(MaxUint64, /*isNeg=*/false));
2088ca7d2a1SThomas Preud'homme 
2098ca7d2a1SThomas Preud'homme   EXPECT_EQ("-0", utostr(0, /*isNeg=*/true));
2108ca7d2a1SThomas Preud'homme   EXPECT_EQ("-1", utostr(1, /*isNeg=*/true));
2118ca7d2a1SThomas Preud'homme   EXPECT_EQ("-" + std::to_string(MaxInt64), utostr(MaxInt64, /*isNeg=*/true));
2128ca7d2a1SThomas Preud'homme   constexpr uint64_t MinusMinInt64 = -static_cast<uint64_t>(MinInt64);
2138ca7d2a1SThomas Preud'homme   EXPECT_EQ("-" + std::to_string(MinusMinInt64),
2148ca7d2a1SThomas Preud'homme             utostr(MinusMinInt64, /*isNeg=*/true));
2158ca7d2a1SThomas Preud'homme   EXPECT_EQ("-" + std::to_string(MaxUint64), utostr(MaxUint64, /*isNeg=*/true));
2168ca7d2a1SThomas Preud'homme }
2178ca7d2a1SThomas Preud'homme 
TEST(StringExtrasTest,IToStr)218955d8899SSimon Pilgrim TEST(StringExtrasTest, IToStr) {
2198ca7d2a1SThomas Preud'homme   EXPECT_EQ("0", itostr(0));
2208ca7d2a1SThomas Preud'homme   EXPECT_EQ("1", itostr(1));
2218ca7d2a1SThomas Preud'homme   EXPECT_EQ("-1", itostr(-1));
2228ca7d2a1SThomas Preud'homme   EXPECT_EQ(std::to_string(MinInt64), itostr(MinInt64));
2238ca7d2a1SThomas Preud'homme   EXPECT_EQ(std::to_string(MaxInt64), itostr(MaxInt64));
2248ca7d2a1SThomas Preud'homme }
225407b1e65SKazu Hirata 
TEST(StringExtrasTest,ListSeparator)226955d8899SSimon Pilgrim TEST(StringExtrasTest, ListSeparator) {
2278fd8ff1fSKazu Hirata   ListSeparator LS;
2288fd8ff1fSKazu Hirata   StringRef S = LS;
229407b1e65SKazu Hirata   EXPECT_EQ(S, "");
2308fd8ff1fSKazu Hirata   S = LS;
231407b1e65SKazu Hirata   EXPECT_EQ(S, ", ");
232407b1e65SKazu Hirata 
2338fd8ff1fSKazu Hirata   ListSeparator LS2(" ");
2348fd8ff1fSKazu Hirata   S = LS2;
235407b1e65SKazu Hirata   EXPECT_EQ(S, "");
2368fd8ff1fSKazu Hirata   S = LS2;
237407b1e65SKazu Hirata   EXPECT_EQ(S, " ");
238407b1e65SKazu Hirata }
23961cdaf66SSimon Pilgrim 
TEST(StringExtrasTest,toStringAPInt)24061cdaf66SSimon Pilgrim TEST(StringExtrasTest, toStringAPInt) {
24161cdaf66SSimon Pilgrim   bool isSigned;
24261cdaf66SSimon Pilgrim 
24361cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 0), 2, true, true), "0b0");
24461cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 0), 8, true, true), "00");
24561cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 0), 10, true, true), "0");
24661cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 0), 16, true, true), "0x0");
24761cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 0), 36, true, false), "0");
24861cdaf66SSimon Pilgrim 
24961cdaf66SSimon Pilgrim   isSigned = false;
25061cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 2, isSigned, true), "0b11111111");
25161cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 8, isSigned, true), "0377");
25261cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 10, isSigned, true), "255");
25361cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 16, isSigned, true), "0xFF");
25461cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 36, isSigned, false), "73");
25561cdaf66SSimon Pilgrim 
25661cdaf66SSimon Pilgrim   isSigned = true;
25761cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 2, isSigned, true), "-0b1");
25861cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 8, isSigned, true), "-01");
25961cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 10, isSigned, true), "-1");
26061cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 16, isSigned, true), "-0x1");
26161cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APInt(8, 255, isSigned), 36, isSigned, false), "-1");
26261cdaf66SSimon Pilgrim }
26361cdaf66SSimon Pilgrim 
TEST(StringExtrasTest,toStringAPSInt)26461cdaf66SSimon Pilgrim TEST(StringExtrasTest, toStringAPSInt) {
26561cdaf66SSimon Pilgrim   bool isUnsigned;
26661cdaf66SSimon Pilgrim 
26761cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 0), false), 2), "0");
26861cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 0), false), 8), "0");
26961cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 0), false), 10), "0");
27061cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 0), false), 16), "0");
27161cdaf66SSimon Pilgrim 
27261cdaf66SSimon Pilgrim   isUnsigned = true;
27361cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 2), "11111111");
27461cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 8), "377");
27561cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 10), "255");
27661cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 16), "FF");
27761cdaf66SSimon Pilgrim 
27861cdaf66SSimon Pilgrim   isUnsigned = false;
27961cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 2), "-1");
28061cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 8), "-1");
28161cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 10), "-1");
28261cdaf66SSimon Pilgrim   EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 16), "-1");
28361cdaf66SSimon Pilgrim }
284f4b71e34SMichał Górny 
TEST(StringExtrasTest,splitStringRef)285f4b71e34SMichał Górny TEST(StringExtrasTest, splitStringRef) {
28666e06cc8SMichał Górny   auto Spl = split("foo<=>bar<=><=>baz", "<=>");
287f4b71e34SMichał Górny   auto It = Spl.begin();
288f4b71e34SMichał Górny   auto End = Spl.end();
289f4b71e34SMichał Górny 
290f4b71e34SMichał Górny   ASSERT_NE(It, End);
291f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef("foo"));
292f4b71e34SMichał Górny   ASSERT_NE(++It, End);
293f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef("bar"));
294f4b71e34SMichał Górny   ASSERT_NE(++It, End);
295f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef(""));
296f4b71e34SMichał Górny   ASSERT_NE(++It, End);
297f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef("baz"));
298f4b71e34SMichał Górny   ASSERT_EQ(++It, End);
299f4b71e34SMichał Górny }
300f4b71e34SMichał Górny 
TEST(StringExtrasTest,splitStringRefForLoop)30166e06cc8SMichał Górny TEST(StringExtrasTest, splitStringRefForLoop) {
30266e06cc8SMichał Górny   llvm::SmallVector<StringRef, 4> Result;
30366e06cc8SMichał Górny   for (StringRef x : split("foo<=>bar<=><=>baz", "<=>"))
30466e06cc8SMichał Górny     Result.push_back(x);
30566e06cc8SMichał Górny   EXPECT_THAT(Result, testing::ElementsAre("foo", "bar", "", "baz"));
30666e06cc8SMichał Górny }
30766e06cc8SMichał Górny 
TEST(StringExtrasTest,splitChar)30866e06cc8SMichał Górny TEST(StringExtrasTest, splitChar) {
30966e06cc8SMichał Górny   auto Spl = split("foo,bar,,baz", ',');
310f4b71e34SMichał Górny   auto It = Spl.begin();
311f4b71e34SMichał Górny   auto End = Spl.end();
312f4b71e34SMichał Górny 
313f4b71e34SMichał Górny   ASSERT_NE(It, End);
314f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef("foo"));
315f4b71e34SMichał Górny   ASSERT_NE(++It, End);
316f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef("bar"));
317f4b71e34SMichał Górny   ASSERT_NE(++It, End);
318f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef(""));
319f4b71e34SMichał Górny   ASSERT_NE(++It, End);
320f4b71e34SMichał Górny   EXPECT_EQ(*It, StringRef("baz"));
321f4b71e34SMichał Górny   ASSERT_EQ(++It, End);
322f4b71e34SMichał Górny }
32366e06cc8SMichał Górny 
TEST(StringExtrasTest,splitCharForLoop)32466e06cc8SMichał Górny TEST(StringExtrasTest, splitCharForLoop) {
32566e06cc8SMichał Górny   llvm::SmallVector<StringRef, 4> Result;
32666e06cc8SMichał Górny   for (StringRef x : split("foo,bar,,baz", ','))
32766e06cc8SMichał Górny     Result.push_back(x);
32866e06cc8SMichał Górny   EXPECT_THAT(Result, testing::ElementsAre("foo", "bar", "", "baz"));
32966e06cc8SMichał Górny }
330