Lines Matching refs:StringRef

1 //===- llvm/unittest/ADT/StringRefTest.cpp - StringRef unit tests ---------===//
9 #include "llvm/ADT/StringRef.h"
20 // StringRef. (Unfortunately we can't make use of the same thing with
22 static_assert(!std::is_assignable_v<StringRef &, std::string>,
24 static_assert(!std::is_assignable_v<StringRef &, std::string &&>,
26 static_assert(std::is_assignable_v<StringRef &, std::string &>,
28 static_assert(std::is_assignable_v<StringRef &, const char *>,
30 static_assert(std::is_assignable_v<StringRef &, const char *&&>,
32 static_assert(std::is_assignable_v<StringRef &, const char *&>,
37 EXPECT_EQ("", StringRef());
38 EXPECT_EQ("hello", StringRef("hello"));
39 EXPECT_EQ("hello", StringRef("hello world", 5));
40 EXPECT_EQ("hello", StringRef(std::string("hello")));
41 EXPECT_EQ("hello", StringRef(std::string_view("hello")));
45 EXPECT_EQ("hello", std::string(StringRef("hello")));
46 EXPECT_EQ("hello", std::string_view(StringRef("hello")));
47 static_assert(std::string_view(StringRef("hello")) == "hello");
51 StringRef S = {};
59 StringRef S("hello");
76 EXPECT_EQ(p, StringRef(p, 0).data());
77 static_assert(StringRef("hello").data()[0] == 'h');
78 static_assert(StringRef("hello").data()[1] == 'e');
79 static_assert(StringRef("hello").data()[2] == 'l');
80 static_assert(StringRef("hello").data()[3] == 'l');
81 static_assert(StringRef("hello").data()[4] == 'o');
82 static_assert(StringRef("hello").data()[5] == '\0');
84 EXPECT_TRUE(StringRef().empty());
85 static_assert(StringRef("").empty());
86 static_assert(!StringRef("hello").empty());
88 EXPECT_EQ((size_t) 5, StringRef("hello").size());
89 static_assert(StringRef("hello").size() == 5);
91 EXPECT_GT( 0, StringRef("aab").compare("aad"));
92 EXPECT_EQ( 0, StringRef("aab").compare("aab"));
93 EXPECT_LT( 0, StringRef("aab").compare("aaa"));
94 EXPECT_GT( 0, StringRef("aab").compare("aabb"));
95 EXPECT_LT( 0, StringRef("aab").compare("aa"));
96 EXPECT_LT( 0, StringRef("\xFF").compare("\1"));
98 EXPECT_EQ(-1, StringRef("AaB").compare_insensitive("aAd"));
99 EXPECT_EQ( 0, StringRef("AaB").compare_insensitive("aab"));
100 EXPECT_EQ( 1, StringRef("AaB").compare_insensitive("AAA"));
101 EXPECT_EQ(-1, StringRef("AaB").compare_insensitive("aaBb"));
102 EXPECT_EQ(-1, StringRef("AaB").compare_insensitive("bb"));
103 EXPECT_EQ( 1, StringRef("aaBb").compare_insensitive("AaB"));
104 EXPECT_EQ( 1, StringRef("bb").compare_insensitive("AaB"));
105 EXPECT_EQ( 1, StringRef("AaB").compare_insensitive("aA"));
106 EXPECT_EQ( 1, StringRef("\xFF").compare_insensitive("\1"));
108 EXPECT_EQ(-1, StringRef("aab").compare_numeric("aad"));
109 EXPECT_EQ( 0, StringRef("aab").compare_numeric("aab"));
110 EXPECT_EQ( 1, StringRef("aab").compare_numeric("aaa"));
111 EXPECT_EQ(-1, StringRef("aab").compare_numeric("aabb"));
112 EXPECT_EQ( 1, StringRef("aab").compare_numeric("aa"));
113 EXPECT_EQ(-1, StringRef("1").compare_numeric("10"));
114 EXPECT_EQ( 0, StringRef("10").compare_numeric("10"));
115 EXPECT_EQ( 0, StringRef("10a").compare_numeric("10a"));
116 EXPECT_EQ( 1, StringRef("2").compare_numeric("1"));
117 EXPECT_EQ( 0, StringRef("llvm_v1i64_ty").compare_numeric("llvm_v1i64_ty"));
118 EXPECT_EQ( 1, StringRef("\xFF").compare_numeric("\1"));
119 EXPECT_EQ( 1, StringRef("V16").compare_numeric("V1_q0"));
120 EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V16"));
121 EXPECT_EQ(-1, StringRef("V8_q0").compare_numeric("V16"));
122 EXPECT_EQ( 1, StringRef("V16").compare_numeric("V8_q0"));
123 EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V8_q0"));
124 EXPECT_EQ( 1, StringRef("V8_q0").compare_numeric("V1_q0"));
128 EXPECT_EQ("", StringRef());
129 EXPECT_TRUE(StringRef("aab") < StringRef("aad"));
130 EXPECT_FALSE(StringRef("aab") < StringRef("aab"));
131 EXPECT_TRUE(StringRef("aab") <= StringRef("aab"));
132 EXPECT_FALSE(StringRef("aab") <= StringRef("aaa"));
133 EXPECT_TRUE(StringRef("aad") > StringRef("aab"));
134 EXPECT_FALSE(StringRef("aab") > StringRef("aab"));
135 EXPECT_TRUE(StringRef("aab") >= StringRef("aab"));
136 EXPECT_FALSE(StringRef("aaa") >= StringRef("aab"));
137 EXPECT_EQ(StringRef("aab"), StringRef("aab"));
138 EXPECT_FALSE(StringRef("aab") == StringRef("aac"));
139 EXPECT_FALSE(StringRef("aab") != StringRef("aab"));
140 EXPECT_TRUE(StringRef("aab") != StringRef("aac"));
141 EXPECT_EQ('a', StringRef("aab")[1]);
145 StringRef Str("hello");
153 StringRef Str("hello");
162 StringRef Str("hello");
163 EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
165 EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
167 EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
169 EXPECT_EQ(std::make_pair(StringRef("he"), StringRef("lo")),
171 EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
174 EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
176 EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
178 EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
180 EXPECT_EQ(std::make_pair(StringRef("hel"), StringRef("o")),
182 EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
185 EXPECT_EQ(std::make_pair(StringRef("he"), StringRef("o")),
187 EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
189 EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
191 EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
193 EXPECT_EQ(std::make_pair(StringRef("hel"), StringRef("o")),
198 SmallVector<StringRef, 5> parts;
199 SmallVector<StringRef, 5> expected;
202 StringRef(",ab,,c,").split(parts, ",", -1, false);
208 StringRef(",ab,,c,").split(parts, ",", -1, true);
213 StringRef("").split(parts, ",", -1, true);
217 StringRef("").split(parts, ",", -1, false);
221 StringRef(",").split(parts, ",", -1, false);
226 StringRef(",").split(parts, ",", -1, true);
231 StringRef("a,b").split(parts, ",", -1, true);
237 StringRef("a,,b,c").split(parts, ",", 0, true);
242 StringRef("a,,b,c").split(parts, ",", 0, false);
247 StringRef("a,,b,c").split(parts, ",", 1, true);
252 StringRef("a,,b,c").split(parts, ",", 1, false);
257 StringRef("a,,b,c").split(parts, ",", 2, true);
262 StringRef("a,,b,c").split(parts, ",", 2, false);
268 StringRef("a,,b,c").split(parts, ",", 3, true);
273 StringRef("a,,b,c").split(parts, ",", 3, false);
278 StringRef("a,,b,c").split(parts, ',', 3, false);
283 StringRef().split(parts, ",", 0, true);
287 expected.push_back(StringRef());
288 StringRef("").split(parts, ",", 0, true);
292 StringRef("").split(parts, ",", 0, false);
294 StringRef().split(parts, ",", 0, false);
302 StringRef("a,,b,c,d").split(parts, ",", 3, true);
307 StringRef().split(parts, ',', 0, true);
311 expected.push_back(StringRef());
312 StringRef("").split(parts, ',', 0, true);
316 StringRef("").split(parts, ',', 0, false);
318 StringRef().split(parts, ',', 0, false);
326 StringRef("a,,b,c,d").split(parts, ',', 3, true);
331 StringRef Str0("hello");
332 StringRef Str1(" hello ");
333 StringRef Str2(" hello ");
334 StringRef Str3("\t\n\v\f\r hello \t\n\v\f\r");
336 EXPECT_EQ(StringRef("hello"), Str0.rtrim());
337 EXPECT_EQ(StringRef(" hello"), Str1.rtrim());
338 EXPECT_EQ(StringRef(" hello"), Str2.rtrim());
339 EXPECT_EQ(StringRef("\t\n\v\f\r hello"), Str3.rtrim());
340 EXPECT_EQ(StringRef("hello"), Str0.ltrim());
341 EXPECT_EQ(StringRef("hello "), Str1.ltrim());
342 EXPECT_EQ(StringRef("hello "), Str2.ltrim());
343 EXPECT_EQ(StringRef("hello \t\n\v\f\r"), Str3.ltrim());
344 EXPECT_EQ(StringRef("hello"), Str0.trim());
345 EXPECT_EQ(StringRef("hello"), Str1.trim());
346 EXPECT_EQ(StringRef("hello"), Str2.trim());
347 EXPECT_EQ(StringRef("hello"), Str3.trim());
349 EXPECT_EQ(StringRef("ello"), Str0.trim("hhhhhhhhhhh"));
351 EXPECT_EQ(StringRef(""), StringRef("").trim());
352 EXPECT_EQ(StringRef(""), StringRef(" ").trim());
353 EXPECT_EQ(StringRef("\0", 1), StringRef(" \0 ", 3).trim());
354 EXPECT_EQ(StringRef("\0\0", 2), StringRef("\0\0", 2).trim());
355 EXPECT_EQ(StringRef("x"), StringRef("\0\0x\0\0", 5).trim('\0'));
359 StringRef Str("hello");
369 StringRef Str("heLLo");
379 StringRef Str("hello");
395 StringRef Str("heLLo");
413 StringRef Str("hello");
424 StringRef Str("heLLo");
434 StringRef Str("hello");
450 StringRef Str("heLLo");
468 StringRef Str("helloHELLO");
469 StringRef LongStr("hellx xello hell ello world foo bar hello HELLO");
472 StringRef Str;
484 {Str, 'z', 0U, StringRef::npos, StringRef::npos},
488 StringRef Str;
489 llvm::StringRef S;
494 {Str, "helloword", 0, StringRef::npos, StringRef::npos},
497 {Str, "zz", 0, StringRef::npos, StringRef::npos},
499 {Str, "ll", 3U, StringRef::npos, 7U},
522 EXPECT_EQ(StringRef::npos, Str.rfind('z'));
523 EXPECT_EQ(StringRef::npos, Str.rfind("helloworld"));
526 EXPECT_EQ(StringRef::npos, Str.rfind("zz"));
530 EXPECT_EQ(StringRef::npos, Str.rfind_insensitive('z'));
531 EXPECT_EQ(StringRef::npos, Str.rfind_insensitive("HELLOWORLD"));
534 EXPECT_EQ(StringRef::npos, Str.rfind("ZZ"));
538 EXPECT_EQ(StringRef::npos, Str.find_first_of("xyz"));
543 EXPECT_EQ(StringRef::npos, Str.find_first_not_of("hello"));
547 EXPECT_EQ(StringRef::npos, Str.find_last_not_of("helo"));
551 StringRef Str("hello");
561 StringRef OverlappingAbba("abbabba");
563 StringRef NonOverlappingAbba("abbaabba");
565 StringRef ComplexAbba("abbabbaxyzabbaxyz");
570 StringRef Hello("hello");
573 StringRef Industry("industry");
576 StringRef Soylent("soylent green is people");
589 StringRef Hello("HELLO");
593 StringRef Industry("InDuStRy");
600 OS << StringRef("hello");
605 EXPECT_EQ(hash_value(std::string()), hash_value(StringRef()));
606 EXPECT_EQ(hash_value(std::string()), hash_value(StringRef("")));
609 EXPECT_EQ(H, hash_value(StringRef("hello world")));
610 EXPECT_EQ(H, hash_value(StringRef(S)));
611 EXPECT_NE(H, hash_value(StringRef("hello worl")));
613 hash_value(StringRef("hello worl")));
614 EXPECT_NE(H, hash_value(StringRef("hello world ")));
616 hash_value(StringRef("hello world ")));
617 EXPECT_EQ(H, hash_value(StringRef("hello world\0")));
619 hash_value(StringRef("hello world").slice(1, -1)));
673 bool U8Success = StringRef(Unsigned[i].Str).getAsInteger(0, U8);
680 bool U16Success = StringRef(Unsigned[i].Str).getAsInteger(0, U16);
687 bool U32Success = StringRef(Unsigned[i].Str).getAsInteger(0, U32);
694 bool U64Success = StringRef(Unsigned[i].Str).getAsInteger(0, U64);
705 bool S8Success = StringRef(Signed[i].Str).getAsInteger(0, S8);
712 bool S16Success = StringRef(Signed[i].Str).getAsInteger(0, S16);
719 bool S32Success = StringRef(Signed[i].Str).getAsInteger(0, S32);
726 bool S64Success = StringRef(Signed[i].Str).getAsInteger(0, S64);
751 bool IsBadNumber = StringRef(BadStrings[i]).getAsInteger(0, U64);
835 StringRef Str = ConsumeUnsigned[i].Str;
889 StringRef Str = ConsumeSigned[i].Str;
950 StringRef S(Entry.Str);
964 std::vector<StringRef> v1;
993 StringRef StrEmpty = "";
994 StringRef StrEmptyc = StrEmpty.copy(Alloc);
1000 StringRef Str1 = "hello";
1001 StringRef Str2 = "bye";
1002 StringRef Str1c = Str1.copy(Alloc);
1003 StringRef Str2c = Str2.copy(Alloc);
1011 StringRef Test("StringRefTest::Drop");
1013 StringRef Dropped = Test.drop_front(5);
1033 StringRef Test("StringRefTest::Take");
1035 StringRef Taken = Test.take_front(5);
1055 StringRef Punct("Test.String");
1056 StringRef NoPunct("ABCDEFG");
1057 StringRef Empty;
1062 EXPECT_EQ(StringRef::npos, NoPunct.find_if(IsPunct));
1063 EXPECT_EQ(StringRef::npos, Empty.find_if(IsPunct));
1066 EXPECT_EQ(StringRef::npos, NoPunct.find_if_not(IsAlpha));
1067 EXPECT_EQ(StringRef::npos, Empty.find_if_not(IsAlpha));
1071 StringRef Test("String With 1 Number");
1073 StringRef Taken = Test.take_while([](char c) { return ::isdigit(c); });
1091 StringRef Test("String With 1 Number");
1093 StringRef Taken = Test.drop_while([](char c) { return ::isdigit(c); });
1105 StringRef EmptyString = "";
1111 constexpr StringRef StringRefs[] = {"Foo", "Bar"};
1112 EXPECT_EQ(StringRef("Foo"), StringRefs[0]);
1116 EXPECT_EQ(StringRef("Bar"), StringRefs[1]);
1119 EXPECT_EQ(StringRef("Foo"), Strings[0]);
1122 EXPECT_EQ(StringRef("Bar"), Strings[1]);
1125 // Check gtest prints StringRef as a string instead of a container of chars.
1128 EXPECT_EQ(R"("foo")", ::testing::PrintToString(StringRef("foo")));
1132 constexpr StringRef Cases[] = {"\nDoggo\nPupper", "Floofer\n", "Woofer"};
1133 EXPECT_EQ(StringRef("\n"), Cases[0].detectEOL());
1134 EXPECT_EQ(StringRef("\n"), Cases[1].detectEOL());
1135 EXPECT_EQ(StringRef("\n"), Cases[2].detectEOL());
1139 constexpr StringRef Cases[] = {"\rDoggo\rPupper", "Floofer\r", "Woo\rfer\n"};
1140 EXPECT_EQ(StringRef("\r"), Cases[0].detectEOL());
1141 EXPECT_EQ(StringRef("\r"), Cases[1].detectEOL());
1142 EXPECT_EQ(StringRef("\r"), Cases[2].detectEOL());
1146 constexpr StringRef Cases[] = {"\r\nDoggo\r\nPupper", "Floofer\r\n",
1148 EXPECT_EQ(StringRef("\r\n"), Cases[0].detectEOL());
1149 EXPECT_EQ(StringRef("\r\n"), Cases[1].detectEOL());
1150 EXPECT_EQ(StringRef("\r\n"), Cases[2].detectEOL());
1154 constexpr StringRef Cases[] = {"\n\rDoggo\n\rPupper", "Floofer\n\r",
1156 EXPECT_EQ(StringRef("\n\r"), Cases[0].detectEOL());
1157 EXPECT_EQ(StringRef("\n\r"), Cases[1].detectEOL());
1158 EXPECT_EQ(StringRef("\n\r"), Cases[2].detectEOL());
1161 static_assert(std::is_trivially_copyable_v<StringRef>, "trivially copyable");