1*9880d681SAndroid Build Coastguard Worker //===- llvm/unittest/ADT/StringRefTest.cpp - StringRef unit tests ---------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/StringRef.h"
11*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/Hashing.h"
12*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/STLExtras.h"
13*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/SmallVector.h"
14*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/StringExtras.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Allocator.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/raw_ostream.h"
17*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
18*9880d681SAndroid Build Coastguard Worker using namespace llvm;
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker namespace llvm {
21*9880d681SAndroid Build Coastguard Worker
operator <<(std::ostream & OS,const StringRef & S)22*9880d681SAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &OS, const StringRef &S) {
23*9880d681SAndroid Build Coastguard Worker OS << S.str();
24*9880d681SAndroid Build Coastguard Worker return OS;
25*9880d681SAndroid Build Coastguard Worker }
26*9880d681SAndroid Build Coastguard Worker
operator <<(std::ostream & OS,const std::pair<StringRef,StringRef> & P)27*9880d681SAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &OS,
28*9880d681SAndroid Build Coastguard Worker const std::pair<StringRef, StringRef> &P) {
29*9880d681SAndroid Build Coastguard Worker OS << "(" << P.first << ", " << P.second << ")";
30*9880d681SAndroid Build Coastguard Worker return OS;
31*9880d681SAndroid Build Coastguard Worker }
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker }
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker namespace {
TEST(StringRefTest,Construction)36*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Construction) {
37*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("", StringRef());
38*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("hello", StringRef("hello"));
39*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("hello", StringRef("hello world", 5));
40*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("hello", StringRef(std::string("hello")));
41*9880d681SAndroid Build Coastguard Worker }
42*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Iteration)43*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Iteration) {
44*9880d681SAndroid Build Coastguard Worker StringRef S("hello");
45*9880d681SAndroid Build Coastguard Worker const char *p = "hello";
46*9880d681SAndroid Build Coastguard Worker for (const char *it = S.begin(), *ie = S.end(); it != ie; ++it, ++p)
47*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(*it, *p);
48*9880d681SAndroid Build Coastguard Worker }
49*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,StringOps)50*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, StringOps) {
51*9880d681SAndroid Build Coastguard Worker const char *p = "hello";
52*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(p, StringRef(p, 0).data());
53*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(StringRef().empty());
54*9880d681SAndroid Build Coastguard Worker EXPECT_EQ((size_t) 5, StringRef("hello").size());
55*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("aab").compare("aad"));
56*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 0, StringRef("aab").compare("aab"));
57*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("aab").compare("aaa"));
58*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("aab").compare("aabb"));
59*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("aab").compare("aa"));
60*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("\xFF").compare("\1"));
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("AaB").compare_lower("aAd"));
63*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 0, StringRef("AaB").compare_lower("aab"));
64*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("AaB").compare_lower("AAA"));
65*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("AaB").compare_lower("aaBb"));
66*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("AaB").compare_lower("bb"));
67*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("aaBb").compare_lower("AaB"));
68*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("bb").compare_lower("AaB"));
69*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("AaB").compare_lower("aA"));
70*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("\xFF").compare_lower("\1"));
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("aab").compare_numeric("aad"));
73*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 0, StringRef("aab").compare_numeric("aab"));
74*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("aab").compare_numeric("aaa"));
75*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("aab").compare_numeric("aabb"));
76*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("aab").compare_numeric("aa"));
77*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("1").compare_numeric("10"));
78*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 0, StringRef("10").compare_numeric("10"));
79*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 0, StringRef("10a").compare_numeric("10a"));
80*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("2").compare_numeric("1"));
81*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 0, StringRef("llvm_v1i64_ty").compare_numeric("llvm_v1i64_ty"));
82*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("\xFF").compare_numeric("\1"));
83*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("V16").compare_numeric("V1_q0"));
84*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V16"));
85*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("V8_q0").compare_numeric("V16"));
86*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("V16").compare_numeric("V8_q0"));
87*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V8_q0"));
88*9880d681SAndroid Build Coastguard Worker EXPECT_EQ( 1, StringRef("V8_q0").compare_numeric("V1_q0"));
89*9880d681SAndroid Build Coastguard Worker }
90*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Operators)91*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Operators) {
92*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("", StringRef());
93*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(StringRef("aab") < StringRef("aad"));
94*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(StringRef("aab") < StringRef("aab"));
95*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(StringRef("aab") <= StringRef("aab"));
96*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(StringRef("aab") <= StringRef("aaa"));
97*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(StringRef("aad") > StringRef("aab"));
98*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(StringRef("aab") > StringRef("aab"));
99*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(StringRef("aab") >= StringRef("aab"));
100*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(StringRef("aaa") >= StringRef("aab"));
101*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("aab"), StringRef("aab"));
102*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(StringRef("aab") == StringRef("aac"));
103*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(StringRef("aab") != StringRef("aab"));
104*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(StringRef("aab") != StringRef("aac"));
105*9880d681SAndroid Build Coastguard Worker EXPECT_EQ('a', StringRef("aab")[1]);
106*9880d681SAndroid Build Coastguard Worker }
107*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Substr)108*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Substr) {
109*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
110*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("lo", Str.substr(3));
111*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("", Str.substr(100));
112*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("hello", Str.substr(0, 100));
113*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("o", Str.substr(4, 10));
114*9880d681SAndroid Build Coastguard Worker }
115*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Slice)116*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Slice) {
117*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
118*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("l", Str.slice(2, 3));
119*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("ell", Str.slice(1, 4));
120*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("llo", Str.slice(2, 100));
121*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("", Str.slice(2, 1));
122*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("", Str.slice(10, 20));
123*9880d681SAndroid Build Coastguard Worker }
124*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Split)125*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Split) {
126*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
127*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
128*9880d681SAndroid Build Coastguard Worker Str.split('X'));
129*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
130*9880d681SAndroid Build Coastguard Worker Str.split('e'));
131*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
132*9880d681SAndroid Build Coastguard Worker Str.split('h'));
133*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("he"), StringRef("lo")),
134*9880d681SAndroid Build Coastguard Worker Str.split('l'));
135*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
136*9880d681SAndroid Build Coastguard Worker Str.split('o'));
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
139*9880d681SAndroid Build Coastguard Worker Str.rsplit('X'));
140*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
141*9880d681SAndroid Build Coastguard Worker Str.rsplit('e'));
142*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
143*9880d681SAndroid Build Coastguard Worker Str.rsplit('h'));
144*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("hel"), StringRef("o")),
145*9880d681SAndroid Build Coastguard Worker Str.rsplit('l'));
146*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
147*9880d681SAndroid Build Coastguard Worker Str.rsplit('o'));
148*9880d681SAndroid Build Coastguard Worker }
149*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Split2)150*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Split2) {
151*9880d681SAndroid Build Coastguard Worker SmallVector<StringRef, 5> parts;
152*9880d681SAndroid Build Coastguard Worker SmallVector<StringRef, 5> expected;
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker expected.push_back("ab"); expected.push_back("c");
155*9880d681SAndroid Build Coastguard Worker StringRef(",ab,,c,").split(parts, ",", -1, false);
156*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
159*9880d681SAndroid Build Coastguard Worker expected.push_back(""); expected.push_back("ab"); expected.push_back("");
160*9880d681SAndroid Build Coastguard Worker expected.push_back("c"); expected.push_back("");
161*9880d681SAndroid Build Coastguard Worker StringRef(",ab,,c,").split(parts, ",", -1, true);
162*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
165*9880d681SAndroid Build Coastguard Worker expected.push_back("");
166*9880d681SAndroid Build Coastguard Worker StringRef("").split(parts, ",", -1, true);
167*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
170*9880d681SAndroid Build Coastguard Worker StringRef("").split(parts, ",", -1, false);
171*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
174*9880d681SAndroid Build Coastguard Worker StringRef(",").split(parts, ",", -1, false);
175*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
178*9880d681SAndroid Build Coastguard Worker expected.push_back(""); expected.push_back("");
179*9880d681SAndroid Build Coastguard Worker StringRef(",").split(parts, ",", -1, true);
180*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
183*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back("b");
184*9880d681SAndroid Build Coastguard Worker StringRef("a,b").split(parts, ",", -1, true);
185*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker // Test MaxSplit
188*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
189*9880d681SAndroid Build Coastguard Worker expected.push_back("a,,b,c");
190*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 0, true);
191*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
194*9880d681SAndroid Build Coastguard Worker expected.push_back("a,,b,c");
195*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 0, false);
196*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
199*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back(",b,c");
200*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 1, true);
201*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
204*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back(",b,c");
205*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 1, false);
206*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
209*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back(""); expected.push_back("b,c");
210*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 2, true);
211*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
214*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back("b,c");
215*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 2, false);
216*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
219*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back(""); expected.push_back("b");
220*9880d681SAndroid Build Coastguard Worker expected.push_back("c");
221*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 3, true);
222*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
225*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back("b"); expected.push_back("c");
226*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ",", 3, false);
227*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
230*9880d681SAndroid Build Coastguard Worker expected.push_back("a"); expected.push_back("b"); expected.push_back("c");
231*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c").split(parts, ',', 3, false);
232*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
235*9880d681SAndroid Build Coastguard Worker expected.push_back("");
236*9880d681SAndroid Build Coastguard Worker StringRef().split(parts, ",", 0, true);
237*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
240*9880d681SAndroid Build Coastguard Worker expected.push_back(StringRef());
241*9880d681SAndroid Build Coastguard Worker StringRef("").split(parts, ",", 0, true);
242*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
245*9880d681SAndroid Build Coastguard Worker StringRef("").split(parts, ",", 0, false);
246*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
247*9880d681SAndroid Build Coastguard Worker StringRef().split(parts, ",", 0, false);
248*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
251*9880d681SAndroid Build Coastguard Worker expected.push_back("a");
252*9880d681SAndroid Build Coastguard Worker expected.push_back("");
253*9880d681SAndroid Build Coastguard Worker expected.push_back("b");
254*9880d681SAndroid Build Coastguard Worker expected.push_back("c,d");
255*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c,d").split(parts, ",", 3, true);
256*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
259*9880d681SAndroid Build Coastguard Worker expected.push_back("");
260*9880d681SAndroid Build Coastguard Worker StringRef().split(parts, ',', 0, true);
261*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
264*9880d681SAndroid Build Coastguard Worker expected.push_back(StringRef());
265*9880d681SAndroid Build Coastguard Worker StringRef("").split(parts, ',', 0, true);
266*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
269*9880d681SAndroid Build Coastguard Worker StringRef("").split(parts, ',', 0, false);
270*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
271*9880d681SAndroid Build Coastguard Worker StringRef().split(parts, ',', 0, false);
272*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Worker expected.clear(); parts.clear();
275*9880d681SAndroid Build Coastguard Worker expected.push_back("a");
276*9880d681SAndroid Build Coastguard Worker expected.push_back("");
277*9880d681SAndroid Build Coastguard Worker expected.push_back("b");
278*9880d681SAndroid Build Coastguard Worker expected.push_back("c,d");
279*9880d681SAndroid Build Coastguard Worker StringRef("a,,b,c,d").split(parts, ',', 3, true);
280*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(parts == expected);
281*9880d681SAndroid Build Coastguard Worker }
282*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Trim)283*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Trim) {
284*9880d681SAndroid Build Coastguard Worker StringRef Str0("hello");
285*9880d681SAndroid Build Coastguard Worker StringRef Str1(" hello ");
286*9880d681SAndroid Build Coastguard Worker StringRef Str2(" hello ");
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("hello"), Str0.rtrim());
289*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef(" hello"), Str1.rtrim());
290*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef(" hello"), Str2.rtrim());
291*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("hello"), Str0.ltrim());
292*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("hello "), Str1.ltrim());
293*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("hello "), Str2.ltrim());
294*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("hello"), Str0.trim());
295*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("hello"), Str1.trim());
296*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("hello"), Str2.trim());
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("ello"), Str0.trim("hhhhhhhhhhh"));
299*9880d681SAndroid Build Coastguard Worker
300*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef(""), StringRef("").trim());
301*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef(""), StringRef(" ").trim());
302*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("\0", 1), StringRef(" \0 ", 3).trim());
303*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("\0\0", 2), StringRef("\0\0", 2).trim());
304*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef("x"), StringRef("\0\0x\0\0", 5).trim('\0'));
305*9880d681SAndroid Build Coastguard Worker }
306*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,StartsWith)307*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, StartsWith) {
308*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
309*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.startswith(""));
310*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.startswith("he"));
311*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.startswith("helloworld"));
312*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.startswith("hi"));
313*9880d681SAndroid Build Coastguard Worker }
314*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,StartsWithLower)315*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, StartsWithLower) {
316*9880d681SAndroid Build Coastguard Worker StringRef Str("heLLo");
317*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.startswith_lower(""));
318*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.startswith_lower("he"));
319*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.startswith_lower("hell"));
320*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.startswith_lower("HELlo"));
321*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.startswith_lower("helloworld"));
322*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.startswith_lower("hi"));
323*9880d681SAndroid Build Coastguard Worker }
324*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,EndsWith)325*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, EndsWith) {
326*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
327*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.endswith(""));
328*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.endswith("lo"));
329*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.endswith("helloworld"));
330*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.endswith("worldhello"));
331*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.endswith("so"));
332*9880d681SAndroid Build Coastguard Worker }
333*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,EndsWithLower)334*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, EndsWithLower) {
335*9880d681SAndroid Build Coastguard Worker StringRef Str("heLLo");
336*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.endswith_lower(""));
337*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.endswith_lower("lo"));
338*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.endswith_lower("LO"));
339*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str.endswith_lower("ELlo"));
340*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.endswith_lower("helloworld"));
341*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(Str.endswith_lower("hi"));
342*9880d681SAndroid Build Coastguard Worker }
343*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Find)344*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Find) {
345*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
346*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(2U, Str.find('l'));
347*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.find('z'));
348*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.find("helloworld"));
349*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0U, Str.find("hello"));
350*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.find("ello"));
351*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.find("zz"));
352*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(2U, Str.find("ll", 2));
353*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.find("ll", 3));
354*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0U, Str.find(""));
355*9880d681SAndroid Build Coastguard Worker StringRef LongStr("hellx xello hell ello world foo bar hello");
356*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(36U, LongStr.find("hello"));
357*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(28U, LongStr.find("foo"));
358*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(12U, LongStr.find("hell", 2));
359*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0U, LongStr.find(""));
360*9880d681SAndroid Build Coastguard Worker
361*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(3U, Str.rfind('l'));
362*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.rfind('z'));
363*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.rfind("helloworld"));
364*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0U, Str.rfind("hello"));
365*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.rfind("ello"));
366*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.rfind("zz"));
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(2U, Str.find_first_of('l'));
369*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.find_first_of("el"));
370*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.find_first_of("xyz"));
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.find_first_not_of('h'));
373*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(4U, Str.find_first_not_of("hel"));
374*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.find_first_not_of("hello"));
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(3U, Str.find_last_not_of('o'));
377*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.find_last_not_of("lo"));
378*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StringRef::npos, Str.find_last_not_of("helo"));
379*9880d681SAndroid Build Coastguard Worker }
380*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Count)381*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Count) {
382*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
383*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(2U, Str.count('l'));
384*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.count('o'));
385*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0U, Str.count('z'));
386*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0U, Str.count("helloworld"));
387*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.count("hello"));
388*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1U, Str.count("ello"));
389*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0U, Str.count("zz"));
390*9880d681SAndroid Build Coastguard Worker }
391*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,EditDistance)392*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, EditDistance) {
393*9880d681SAndroid Build Coastguard Worker StringRef Str("hello");
394*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(2U, Str.edit_distance("hill"));
395*9880d681SAndroid Build Coastguard Worker }
396*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Misc)397*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Misc) {
398*9880d681SAndroid Build Coastguard Worker std::string Storage;
399*9880d681SAndroid Build Coastguard Worker raw_string_ostream OS(Storage);
400*9880d681SAndroid Build Coastguard Worker OS << StringRef("hello");
401*9880d681SAndroid Build Coastguard Worker EXPECT_EQ("hello", OS.str());
402*9880d681SAndroid Build Coastguard Worker }
403*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,Hashing)404*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, Hashing) {
405*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(hash_value(std::string()), hash_value(StringRef()));
406*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(hash_value(std::string()), hash_value(StringRef("")));
407*9880d681SAndroid Build Coastguard Worker std::string S = "hello world";
408*9880d681SAndroid Build Coastguard Worker hash_code H = hash_value(S);
409*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(H, hash_value(StringRef("hello world")));
410*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(H, hash_value(StringRef(S)));
411*9880d681SAndroid Build Coastguard Worker EXPECT_NE(H, hash_value(StringRef("hello worl")));
412*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(hash_value(std::string("hello worl")),
413*9880d681SAndroid Build Coastguard Worker hash_value(StringRef("hello worl")));
414*9880d681SAndroid Build Coastguard Worker EXPECT_NE(H, hash_value(StringRef("hello world ")));
415*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(hash_value(std::string("hello world ")),
416*9880d681SAndroid Build Coastguard Worker hash_value(StringRef("hello world ")));
417*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(H, hash_value(StringRef("hello world\0")));
418*9880d681SAndroid Build Coastguard Worker EXPECT_NE(hash_value(std::string("ello worl")),
419*9880d681SAndroid Build Coastguard Worker hash_value(StringRef("hello world").slice(1, -1)));
420*9880d681SAndroid Build Coastguard Worker }
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Worker struct UnsignedPair {
423*9880d681SAndroid Build Coastguard Worker const char *Str;
424*9880d681SAndroid Build Coastguard Worker uint64_t Expected;
425*9880d681SAndroid Build Coastguard Worker } Unsigned[] =
426*9880d681SAndroid Build Coastguard Worker { {"0", 0}
427*9880d681SAndroid Build Coastguard Worker , {"255", 255}
428*9880d681SAndroid Build Coastguard Worker , {"256", 256}
429*9880d681SAndroid Build Coastguard Worker , {"65535", 65535}
430*9880d681SAndroid Build Coastguard Worker , {"65536", 65536}
431*9880d681SAndroid Build Coastguard Worker , {"4294967295", 4294967295ULL}
432*9880d681SAndroid Build Coastguard Worker , {"4294967296", 4294967296ULL}
433*9880d681SAndroid Build Coastguard Worker , {"18446744073709551615", 18446744073709551615ULL}
434*9880d681SAndroid Build Coastguard Worker , {"042", 34}
435*9880d681SAndroid Build Coastguard Worker , {"0x42", 66}
436*9880d681SAndroid Build Coastguard Worker , {"0b101010", 42}
437*9880d681SAndroid Build Coastguard Worker };
438*9880d681SAndroid Build Coastguard Worker
439*9880d681SAndroid Build Coastguard Worker struct SignedPair {
440*9880d681SAndroid Build Coastguard Worker const char *Str;
441*9880d681SAndroid Build Coastguard Worker int64_t Expected;
442*9880d681SAndroid Build Coastguard Worker } Signed[] =
443*9880d681SAndroid Build Coastguard Worker { {"0", 0}
444*9880d681SAndroid Build Coastguard Worker , {"-0", 0}
445*9880d681SAndroid Build Coastguard Worker , {"127", 127}
446*9880d681SAndroid Build Coastguard Worker , {"128", 128}
447*9880d681SAndroid Build Coastguard Worker , {"-128", -128}
448*9880d681SAndroid Build Coastguard Worker , {"-129", -129}
449*9880d681SAndroid Build Coastguard Worker , {"32767", 32767}
450*9880d681SAndroid Build Coastguard Worker , {"32768", 32768}
451*9880d681SAndroid Build Coastguard Worker , {"-32768", -32768}
452*9880d681SAndroid Build Coastguard Worker , {"-32769", -32769}
453*9880d681SAndroid Build Coastguard Worker , {"2147483647", 2147483647LL}
454*9880d681SAndroid Build Coastguard Worker , {"2147483648", 2147483648LL}
455*9880d681SAndroid Build Coastguard Worker , {"-2147483648", -2147483648LL}
456*9880d681SAndroid Build Coastguard Worker , {"-2147483649", -2147483649LL}
457*9880d681SAndroid Build Coastguard Worker , {"-9223372036854775808", -(9223372036854775807LL) - 1}
458*9880d681SAndroid Build Coastguard Worker , {"042", 34}
459*9880d681SAndroid Build Coastguard Worker , {"0x42", 66}
460*9880d681SAndroid Build Coastguard Worker , {"0b101010", 42}
461*9880d681SAndroid Build Coastguard Worker , {"-042", -34}
462*9880d681SAndroid Build Coastguard Worker , {"-0x42", -66}
463*9880d681SAndroid Build Coastguard Worker , {"-0b101010", -42}
464*9880d681SAndroid Build Coastguard Worker };
465*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,getAsInteger)466*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, getAsInteger) {
467*9880d681SAndroid Build Coastguard Worker uint8_t U8;
468*9880d681SAndroid Build Coastguard Worker uint16_t U16;
469*9880d681SAndroid Build Coastguard Worker uint32_t U32;
470*9880d681SAndroid Build Coastguard Worker uint64_t U64;
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Worker for (size_t i = 0; i < array_lengthof(Unsigned); ++i) {
473*9880d681SAndroid Build Coastguard Worker bool U8Success = StringRef(Unsigned[i].Str).getAsInteger(0, U8);
474*9880d681SAndroid Build Coastguard Worker if (static_cast<uint8_t>(Unsigned[i].Expected) == Unsigned[i].Expected) {
475*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(U8Success);
476*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(U8, Unsigned[i].Expected);
477*9880d681SAndroid Build Coastguard Worker } else {
478*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(U8Success);
479*9880d681SAndroid Build Coastguard Worker }
480*9880d681SAndroid Build Coastguard Worker bool U16Success = StringRef(Unsigned[i].Str).getAsInteger(0, U16);
481*9880d681SAndroid Build Coastguard Worker if (static_cast<uint16_t>(Unsigned[i].Expected) == Unsigned[i].Expected) {
482*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(U16Success);
483*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(U16, Unsigned[i].Expected);
484*9880d681SAndroid Build Coastguard Worker } else {
485*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(U16Success);
486*9880d681SAndroid Build Coastguard Worker }
487*9880d681SAndroid Build Coastguard Worker bool U32Success = StringRef(Unsigned[i].Str).getAsInteger(0, U32);
488*9880d681SAndroid Build Coastguard Worker if (static_cast<uint32_t>(Unsigned[i].Expected) == Unsigned[i].Expected) {
489*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(U32Success);
490*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(U32, Unsigned[i].Expected);
491*9880d681SAndroid Build Coastguard Worker } else {
492*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(U32Success);
493*9880d681SAndroid Build Coastguard Worker }
494*9880d681SAndroid Build Coastguard Worker bool U64Success = StringRef(Unsigned[i].Str).getAsInteger(0, U64);
495*9880d681SAndroid Build Coastguard Worker if (static_cast<uint64_t>(Unsigned[i].Expected) == Unsigned[i].Expected) {
496*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(U64Success);
497*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(U64, Unsigned[i].Expected);
498*9880d681SAndroid Build Coastguard Worker } else {
499*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(U64Success);
500*9880d681SAndroid Build Coastguard Worker }
501*9880d681SAndroid Build Coastguard Worker }
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Worker int8_t S8;
504*9880d681SAndroid Build Coastguard Worker int16_t S16;
505*9880d681SAndroid Build Coastguard Worker int32_t S32;
506*9880d681SAndroid Build Coastguard Worker int64_t S64;
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Worker for (size_t i = 0; i < array_lengthof(Signed); ++i) {
509*9880d681SAndroid Build Coastguard Worker bool S8Success = StringRef(Signed[i].Str).getAsInteger(0, S8);
510*9880d681SAndroid Build Coastguard Worker if (static_cast<int8_t>(Signed[i].Expected) == Signed[i].Expected) {
511*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(S8Success);
512*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(S8, Signed[i].Expected);
513*9880d681SAndroid Build Coastguard Worker } else {
514*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(S8Success);
515*9880d681SAndroid Build Coastguard Worker }
516*9880d681SAndroid Build Coastguard Worker bool S16Success = StringRef(Signed[i].Str).getAsInteger(0, S16);
517*9880d681SAndroid Build Coastguard Worker if (static_cast<int16_t>(Signed[i].Expected) == Signed[i].Expected) {
518*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(S16Success);
519*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(S16, Signed[i].Expected);
520*9880d681SAndroid Build Coastguard Worker } else {
521*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(S16Success);
522*9880d681SAndroid Build Coastguard Worker }
523*9880d681SAndroid Build Coastguard Worker bool S32Success = StringRef(Signed[i].Str).getAsInteger(0, S32);
524*9880d681SAndroid Build Coastguard Worker if (static_cast<int32_t>(Signed[i].Expected) == Signed[i].Expected) {
525*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(S32Success);
526*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(S32, Signed[i].Expected);
527*9880d681SAndroid Build Coastguard Worker } else {
528*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(S32Success);
529*9880d681SAndroid Build Coastguard Worker }
530*9880d681SAndroid Build Coastguard Worker bool S64Success = StringRef(Signed[i].Str).getAsInteger(0, S64);
531*9880d681SAndroid Build Coastguard Worker if (static_cast<int64_t>(Signed[i].Expected) == Signed[i].Expected) {
532*9880d681SAndroid Build Coastguard Worker ASSERT_FALSE(S64Success);
533*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(S64, Signed[i].Expected);
534*9880d681SAndroid Build Coastguard Worker } else {
535*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(S64Success);
536*9880d681SAndroid Build Coastguard Worker }
537*9880d681SAndroid Build Coastguard Worker }
538*9880d681SAndroid Build Coastguard Worker }
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Worker
541*9880d681SAndroid Build Coastguard Worker static const char* BadStrings[] = {
542*9880d681SAndroid Build Coastguard Worker "18446744073709551617" // value just over max
543*9880d681SAndroid Build Coastguard Worker , "123456789012345678901" // value way too large
544*9880d681SAndroid Build Coastguard Worker , "4t23v" // illegal decimal characters
545*9880d681SAndroid Build Coastguard Worker , "0x123W56" // illegal hex characters
546*9880d681SAndroid Build Coastguard Worker , "0b2" // illegal bin characters
547*9880d681SAndroid Build Coastguard Worker , "08" // illegal oct characters
548*9880d681SAndroid Build Coastguard Worker , "0o8" // illegal oct characters
549*9880d681SAndroid Build Coastguard Worker , "-123" // negative unsigned value
550*9880d681SAndroid Build Coastguard Worker };
551*9880d681SAndroid Build Coastguard Worker
552*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,getAsUnsignedIntegerBadStrings)553*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, getAsUnsignedIntegerBadStrings) {
554*9880d681SAndroid Build Coastguard Worker unsigned long long U64;
555*9880d681SAndroid Build Coastguard Worker for (size_t i = 0; i < array_lengthof(BadStrings); ++i) {
556*9880d681SAndroid Build Coastguard Worker bool IsBadNumber = StringRef(BadStrings[i]).getAsInteger(0, U64);
557*9880d681SAndroid Build Coastguard Worker ASSERT_TRUE(IsBadNumber);
558*9880d681SAndroid Build Coastguard Worker }
559*9880d681SAndroid Build Coastguard Worker }
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Worker static const char *join_input[] = { "a", "b", "c" };
562*9880d681SAndroid Build Coastguard Worker static const char join_result1[] = "a";
563*9880d681SAndroid Build Coastguard Worker static const char join_result2[] = "a:b:c";
564*9880d681SAndroid Build Coastguard Worker static const char join_result3[] = "a::b::c";
565*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,joinStrings)566*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, joinStrings) {
567*9880d681SAndroid Build Coastguard Worker std::vector<StringRef> v1;
568*9880d681SAndroid Build Coastguard Worker std::vector<std::string> v2;
569*9880d681SAndroid Build Coastguard Worker for (size_t i = 0; i < array_lengthof(join_input); ++i) {
570*9880d681SAndroid Build Coastguard Worker v1.push_back(join_input[i]);
571*9880d681SAndroid Build Coastguard Worker v2.push_back(join_input[i]);
572*9880d681SAndroid Build Coastguard Worker }
573*9880d681SAndroid Build Coastguard Worker
574*9880d681SAndroid Build Coastguard Worker bool v1_join1 = join(v1.begin(), v1.begin() + 1, ":") == join_result1;
575*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(v1_join1);
576*9880d681SAndroid Build Coastguard Worker bool v1_join2 = join(v1.begin(), v1.end(), ":") == join_result2;
577*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(v1_join2);
578*9880d681SAndroid Build Coastguard Worker bool v1_join3 = join(v1.begin(), v1.end(), "::") == join_result3;
579*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(v1_join3);
580*9880d681SAndroid Build Coastguard Worker
581*9880d681SAndroid Build Coastguard Worker bool v2_join1 = join(v2.begin(), v2.begin() + 1, ":") == join_result1;
582*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(v2_join1);
583*9880d681SAndroid Build Coastguard Worker bool v2_join2 = join(v2.begin(), v2.end(), ":") == join_result2;
584*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(v2_join2);
585*9880d681SAndroid Build Coastguard Worker bool v2_join3 = join(v2.begin(), v2.end(), "::") == join_result3;
586*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(v2_join3);
587*9880d681SAndroid Build Coastguard Worker }
588*9880d681SAndroid Build Coastguard Worker
589*9880d681SAndroid Build Coastguard Worker
TEST(StringRefTest,AllocatorCopy)590*9880d681SAndroid Build Coastguard Worker TEST(StringRefTest, AllocatorCopy) {
591*9880d681SAndroid Build Coastguard Worker BumpPtrAllocator Alloc;
592*9880d681SAndroid Build Coastguard Worker // First test empty strings. We don't want these to allocate anything on the
593*9880d681SAndroid Build Coastguard Worker // allocator.
594*9880d681SAndroid Build Coastguard Worker StringRef StrEmpty = "";
595*9880d681SAndroid Build Coastguard Worker StringRef StrEmptyc = StrEmpty.copy(Alloc);
596*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(StrEmpty.equals(StrEmptyc));
597*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StrEmptyc.data(), nullptr);
598*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(StrEmptyc.size(), 0u);
599*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(Alloc.getTotalMemory(), 0u);
600*9880d681SAndroid Build Coastguard Worker
601*9880d681SAndroid Build Coastguard Worker StringRef Str1 = "hello";
602*9880d681SAndroid Build Coastguard Worker StringRef Str2 = "bye";
603*9880d681SAndroid Build Coastguard Worker StringRef Str1c = Str1.copy(Alloc);
604*9880d681SAndroid Build Coastguard Worker StringRef Str2c = Str2.copy(Alloc);
605*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str1.equals(Str1c));
606*9880d681SAndroid Build Coastguard Worker EXPECT_NE(Str1.data(), Str1c.data());
607*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(Str2.equals(Str2c));
608*9880d681SAndroid Build Coastguard Worker EXPECT_NE(Str2.data(), Str2c.data());
609*9880d681SAndroid Build Coastguard Worker }
610*9880d681SAndroid Build Coastguard Worker
611*9880d681SAndroid Build Coastguard Worker
612*9880d681SAndroid Build Coastguard Worker } // end anonymous namespace
613