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