StringRefTest.cpp revision 7e54d5b1562f085c898bf8fcc4ac939ec893444c
14cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//===- llvm/unittest/ADT/StringRefTest.cpp - StringRef unit tests ---------===//
24cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//
34cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//                     The LLVM Compiler Infrastructure
44cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//
54cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// This file is distributed under the University of Illinois Open Source
64cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// License. See LICENSE.TXT for details.
74cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//
84cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//===----------------------------------------------------------------------===//
94cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
104cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar#include "gtest/gtest.h"
114cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar#include "llvm/ADT/StringRef.h"
12c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola#include "llvm/ADT/SmallVector.h"
13dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar#include "llvm/Support/raw_ostream.h"
144cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbarusing namespace llvm;
154cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
16c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregornamespace llvm {
174cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
18e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbarstd::ostream &operator<<(std::ostream &OS, const StringRef &S) {
19e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  OS << S;
20e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  return OS;
21e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
22e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
23e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbarstd::ostream &operator<<(std::ostream &OS,
24e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar                         const std::pair<StringRef, StringRef> &P) {
25e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  OS << "(" << P.first << ", " << P.second << ")";
26e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  return OS;
27e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
28e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
29c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregor}
30c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregor
31c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregornamespace {
324cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Construction) {
33e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", StringRef());
34e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("hello", StringRef("hello"));
35e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("hello", StringRef("hello world", 5));
36e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("hello", StringRef(std::string("hello")));
374cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar}
384cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
394cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Iteration) {
404cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  StringRef S("hello");
414cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  const char *p = "hello";
424cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  for (const char *it = S.begin(), *ie = S.end(); it != ie; ++it, ++p)
43e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar    EXPECT_EQ(*it, *p);
444cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar}
454cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
464cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, StringOps) {
474cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  const char *p = "hello";
484cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ(p, StringRef(p, 0).data());
494cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef().empty());
504cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ((size_t) 5, StringRef("hello").size());
514cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ(-1, StringRef("aab").compare("aad"));
524cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ( 0, StringRef("aab").compare("aab"));
534cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ( 1, StringRef("aab").compare("aaa"));
544cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ(-1, StringRef("aab").compare("aabb"));
554cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ( 1, StringRef("aab").compare("aa"));
564cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar}
574cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
584cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Operators) {
59e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", StringRef());
604cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") < StringRef("aad"));
614cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") < StringRef("aab"));
624cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") <= StringRef("aab"));
634cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") <= StringRef("aaa"));
644cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aad") > StringRef("aab"));
654cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") > StringRef("aab"));
664cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") >= StringRef("aab"));
674cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aaa") >= StringRef("aab"));
68e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef("aab"), StringRef("aab"));
694cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") == StringRef("aac"));
704cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") != StringRef("aab"));
714cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") != StringRef("aac"));
724cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ('a', StringRef("aab")[1]);
734cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar}
744cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
75e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Substr) {
76f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  StringRef Str("hello");
77e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("lo", Str.substr(3));
78e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", Str.substr(100));
79e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("hello", Str.substr(0, 100));
80e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("o", Str.substr(4, 10));
81e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
82e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
83e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Slice) {
84e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
85e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("l", Str.slice(2, 3));
86e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("ell", Str.slice(1, 4));
87e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("llo", Str.slice(2, 100));
88e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", Str.slice(2, 1));
89e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", Str.slice(10, 20));
90e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
91e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
92e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Split) {
93e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
94e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
95e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('X'));
96e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
97e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('e'));
98e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
99e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('h'));
100e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("he"), StringRef("lo")),
101e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('l'));
102e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
103e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('o'));
104e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
105e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
106e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('X'));
107e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
108e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('e'));
109e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
110e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('h'));
111e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hel"), StringRef("o")),
112e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('l'));
113e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
114e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('o'));
115e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
116d61918fc6898a89df8b0a03e068f234ded010cdfDaniel Dunbar
1175ccac247263ab62975f3b72421fc783f10ccf5f6Rafael EspindolaTEST(StringRefTest, Split2) {
118c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola  SmallVector<StringRef, 5> parts;
119c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola  SmallVector<StringRef, 5> expected;
1205ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1215ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("ab"); expected.push_back("c");
1225ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",ab,,c,").split(parts, ",", -1, false);
1235ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1245ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1255ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1265ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back(""); expected.push_back("ab"); expected.push_back("");
1275ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("c"); expected.push_back("");
1285ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",ab,,c,").split(parts, ",", -1, true);
1295ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1305ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1315ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1325ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("");
1335ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("").split(parts, ",", -1, true);
1345ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1355ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1365ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1375ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("").split(parts, ",", -1, false);
1385ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1395ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1405ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1415ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",").split(parts, ",", -1, false);
1425ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1435ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1445ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1455ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back(""); expected.push_back("");
1465ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",").split(parts, ",", -1, true);
1475ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1485ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
14920fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  expected.clear(); parts.clear();
15020fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  expected.push_back("a"); expected.push_back("b");
15120fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  StringRef("a,b").split(parts, ",", -1, true);
15220fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  EXPECT_TRUE(parts == expected);
15320fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola
1545ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  // Test MaxSplit
1555ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1565ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a,,b,c");
1575ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 0, true);
1585ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1595ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1605ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1615ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a,,b,c");
1625ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 0, false);
1635ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1645ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1655ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1665ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(",b,c");
1675ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 1, true);
1685ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1695ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1705ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1715ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(",b,c");
1725ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 1, false);
1735ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1745ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1755ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1765ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(""); expected.push_back("b,c");
1775ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 2, true);
1785ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1795ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1805ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1815ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back("b,c");
1825ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 2, false);
1835ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1845ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1855ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1865ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(""); expected.push_back("b");
1875ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("c");
1885ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 3, true);
1895ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1905ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1915ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1925ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back("b"); expected.push_back("c");
1935ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 3, false);
1945ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1955ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola}
1965ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
197e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, StartsWith) {
198e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
199f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  EXPECT_TRUE(Str.startswith("he"));
200f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  EXPECT_FALSE(Str.startswith("helloworld"));
201f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  EXPECT_FALSE(Str.startswith("hi"));
202e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
203dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar
204d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli FriedmanTEST(StringRefTest, EndsWith) {
205d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  StringRef Str("hello");
206d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_TRUE(Str.endswith("lo"));
207d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_FALSE(Str.endswith("helloworld"));
208d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_FALSE(Str.endswith("worldhello"));
209d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_FALSE(Str.endswith("so"));
210d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman}
211d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman
212e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Find) {
213e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
214e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(2U, Str.find('l'));
215e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find('z'));
216e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find("helloworld"));
217e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.find("hello"));
218e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.find("ello"));
219e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find("zz"));
22064066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(2U, Str.find("ll", 2));
22164066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find("ll", 3));
222e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
223e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(3U, Str.rfind('l'));
224e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.rfind('z'));
225e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.rfind("helloworld"));
226e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.rfind("hello"));
227e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.rfind("ello"));
228e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.rfind("zz"));
22964066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar
23064066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(2U, Str.find_first_of('l'));
23164066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(1U, Str.find_first_of("el"));
23264066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find_first_of("xyz"));
23364066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar
23464066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(1U, Str.find_first_not_of('h'));
23564066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(4U, Str.find_first_not_of("hel"));
23664066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find_first_not_of("hello"));
237e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
238e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
239e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Count) {
240e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
241e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(2U, Str.count('l'));
242e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.count('o'));
243e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.count('z'));
244e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.count("helloworld"));
245e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.count("hello"));
246e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.count("ello"));
247e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.count("zz"));
248e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
249e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
2507e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas GregorTEST(StringRefTest, EditDistance) {
2517e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor  StringRef Str("hello");
2527e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor  EXPECT_EQ(2, Str.edit_distance("hill"));
2537e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor}
2547e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor
255e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Misc) {
256dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  std::string Storage;
257dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  raw_string_ostream OS(Storage);
258dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  OS << StringRef("hello");
259dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  EXPECT_EQ("hello", OS.str());
260f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar}
261f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar
2624cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} // end anonymous namespace
263