StringRefTest.cpp revision 6e6a558ebce556476d8fd659b419a2760f2ab154
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) {
19b3371cdf5e6f8a9286a56fb94d70278be6f64276Chris Lattner  OS << S.str();
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"));
560043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer  EXPECT_EQ( 1, StringRef("\xFF").compare("\1"));
570043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer
580043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer  EXPECT_EQ(-1, StringRef("AaB").compare_lower("aAd"));
590043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer  EXPECT_EQ( 0, StringRef("AaB").compare_lower("aab"));
600043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer  EXPECT_EQ( 1, StringRef("AaB").compare_lower("AAA"));
610043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer  EXPECT_EQ(-1, StringRef("AaB").compare_lower("aaBb"));
620043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer  EXPECT_EQ( 1, StringRef("AaB").compare_lower("aA"));
630043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer  EXPECT_EQ( 1, StringRef("\xFF").compare_lower("\1"));
64160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen
65160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ(-1, StringRef("aab").compare_numeric("aad"));
66160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ( 0, StringRef("aab").compare_numeric("aab"));
67160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ( 1, StringRef("aab").compare_numeric("aaa"));
68160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ(-1, StringRef("aab").compare_numeric("aabb"));
69160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ( 1, StringRef("aab").compare_numeric("aa"));
70160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ(-1, StringRef("1").compare_numeric("10"));
71160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ( 0, StringRef("10").compare_numeric("10"));
72160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ( 0, StringRef("10a").compare_numeric("10a"));
73160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ( 1, StringRef("2").compare_numeric("1"));
74160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen  EXPECT_EQ( 0, StringRef("llvm_v1i64_ty").compare_numeric("llvm_v1i64_ty"));
75837bccd052ea930915173fc83e733c7d8187002dBenjamin Kramer  EXPECT_EQ( 1, StringRef("\xFF").compare_numeric("\1"));
767850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen  EXPECT_EQ( 1, StringRef("V16").compare_numeric("V1_q0"));
777850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen  EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V16"));
787850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen  EXPECT_EQ(-1, StringRef("V8_q0").compare_numeric("V16"));
797850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen  EXPECT_EQ( 1, StringRef("V16").compare_numeric("V8_q0"));
807850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen  EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V8_q0"));
817850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen  EXPECT_EQ( 1, StringRef("V8_q0").compare_numeric("V1_q0"));
824cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar}
834cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
844cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Operators) {
85e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", StringRef());
864cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") < StringRef("aad"));
874cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") < StringRef("aab"));
884cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") <= StringRef("aab"));
894cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") <= StringRef("aaa"));
904cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aad") > StringRef("aab"));
914cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") > StringRef("aab"));
924cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") >= StringRef("aab"));
934cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aaa") >= StringRef("aab"));
94e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef("aab"), StringRef("aab"));
954cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") == StringRef("aac"));
964cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_FALSE(StringRef("aab") != StringRef("aab"));
974cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_TRUE(StringRef("aab") != StringRef("aac"));
984cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar  EXPECT_EQ('a', StringRef("aab")[1]);
994cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar}
1004cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar
101e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Substr) {
102f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  StringRef Str("hello");
103e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("lo", Str.substr(3));
104e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", Str.substr(100));
105e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("hello", Str.substr(0, 100));
106e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("o", Str.substr(4, 10));
107e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
108e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
109e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Slice) {
110e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
111e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("l", Str.slice(2, 3));
112e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("ell", Str.slice(1, 4));
113e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("llo", Str.slice(2, 100));
114e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", Str.slice(2, 1));
115e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ("", Str.slice(10, 20));
116e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
117e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
118e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Split) {
119e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
120e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
121e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('X'));
122e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
123e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('e'));
124e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
125e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('h'));
126e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("he"), StringRef("lo")),
127e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('l'));
128e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
129e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.split('o'));
130e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
131e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")),
132e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('X'));
133e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")),
134e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('e'));
135e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")),
136e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('h'));
137e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hel"), StringRef("o")),
138e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('l'));
139e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")),
140e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar            Str.rsplit('o'));
141e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
142d61918fc6898a89df8b0a03e068f234ded010cdfDaniel Dunbar
1435ccac247263ab62975f3b72421fc783f10ccf5f6Rafael EspindolaTEST(StringRefTest, Split2) {
144c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola  SmallVector<StringRef, 5> parts;
145c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola  SmallVector<StringRef, 5> expected;
1465ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1475ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("ab"); expected.push_back("c");
1485ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",ab,,c,").split(parts, ",", -1, false);
1495ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1505ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1515ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1525ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back(""); expected.push_back("ab"); expected.push_back("");
1535ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("c"); expected.push_back("");
1545ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",ab,,c,").split(parts, ",", -1, true);
1555ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1565ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1575ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1585ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("");
1595ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("").split(parts, ",", -1, true);
1605ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1615ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1625ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1635ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("").split(parts, ",", -1, false);
1645ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1655ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1665ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1675ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",").split(parts, ",", -1, false);
1685ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1695ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1705ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1715ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back(""); expected.push_back("");
1725ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef(",").split(parts, ",", -1, true);
1735ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1745ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
17520fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  expected.clear(); parts.clear();
17620fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  expected.push_back("a"); expected.push_back("b");
17720fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  StringRef("a,b").split(parts, ",", -1, true);
17820fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola  EXPECT_TRUE(parts == expected);
17920fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola
1805ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  // Test MaxSplit
1815ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1825ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a,,b,c");
1835ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 0, true);
1845ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1855ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1865ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1875ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a,,b,c");
1885ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 0, false);
1895ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1905ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1915ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1925ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(",b,c");
1935ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 1, true);
1945ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
1955ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
1965ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
1975ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(",b,c");
1985ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 1, false);
1995ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
2005ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
2015ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
2025ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(""); expected.push_back("b,c");
2035ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 2, true);
2045ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
2055ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
2065ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
2075ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back("b,c");
2085ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 2, false);
2095ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
2105ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
2115ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
2125ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back(""); expected.push_back("b");
2135ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("c");
2145ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 3, true);
2155ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
2165ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
2175ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.clear(); parts.clear();
2185ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  expected.push_back("a"); expected.push_back("b"); expected.push_back("c");
2195ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  StringRef("a,,b,c").split(parts, ",", 3, false);
2205ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola  EXPECT_TRUE(parts == expected);
2215ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola}
2225ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola
223e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, StartsWith) {
224e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
225f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  EXPECT_TRUE(Str.startswith("he"));
226f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  EXPECT_FALSE(Str.startswith("helloworld"));
227f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar  EXPECT_FALSE(Str.startswith("hi"));
228e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
229dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar
230d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli FriedmanTEST(StringRefTest, EndsWith) {
231d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  StringRef Str("hello");
232d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_TRUE(Str.endswith("lo"));
233d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_FALSE(Str.endswith("helloworld"));
234d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_FALSE(Str.endswith("worldhello"));
235d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman  EXPECT_FALSE(Str.endswith("so"));
236d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman}
237d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman
238e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Find) {
239e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
240e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(2U, Str.find('l'));
241e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find('z'));
242e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find("helloworld"));
243e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.find("hello"));
244e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.find("ello"));
245e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find("zz"));
24664066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(2U, Str.find("ll", 2));
24764066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find("ll", 3));
2486e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer  EXPECT_EQ(0U, Str.find(""));
2496e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer  StringRef LongStr("hellx xello hell ello world foo bar hello");
2506e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer  EXPECT_EQ(36U, LongStr.find("hello"));
2516e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer  EXPECT_EQ(28U, LongStr.find("foo"));
2526e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer  EXPECT_EQ(12U, LongStr.find("hell", 2));
2536e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer  EXPECT_EQ(0U, LongStr.find(""));
254e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
255e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(3U, Str.rfind('l'));
256e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.rfind('z'));
257e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.rfind("helloworld"));
258e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.rfind("hello"));
259e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.rfind("ello"));
260e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(StringRef::npos, Str.rfind("zz"));
26164066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar
26264066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(2U, Str.find_first_of('l'));
26364066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(1U, Str.find_first_of("el"));
26464066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find_first_of("xyz"));
26564066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar
26664066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(1U, Str.find_first_not_of('h'));
26764066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(4U, Str.find_first_not_of("hel"));
26864066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar  EXPECT_EQ(StringRef::npos, Str.find_first_not_of("hello"));
269e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
270e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
271e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Count) {
272e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  StringRef Str("hello");
273e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(2U, Str.count('l'));
274e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.count('o'));
275e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.count('z'));
276e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.count("helloworld"));
277e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.count("hello"));
278e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(1U, Str.count("ello"));
279e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar  EXPECT_EQ(0U, Str.count("zz"));
280e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar}
281e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar
2827e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas GregorTEST(StringRefTest, EditDistance) {
2837e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor  StringRef Str("hello");
2844760467ff2c5e9d03d469cee2f14c6e68b096d65Benjamin Kramer  EXPECT_EQ(2U, Str.edit_distance("hill"));
2857e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor}
2867e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor
287e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Misc) {
288dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  std::string Storage;
289dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  raw_string_ostream OS(Storage);
290dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  OS << StringRef("hello");
291dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar  EXPECT_EQ("hello", OS.str());
292f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar}
293f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar
2944cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} // end anonymous namespace
295