StringRefTest.cpp revision e65512809a4144c17538aac4cc59fac6d325a7e4
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" 12dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar#include "llvm/Support/raw_ostream.h" 134cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbarusing namespace llvm; 144cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 154cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbarnamespace { 164cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 17e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbarstd::ostream &operator<<(std::ostream &OS, const StringRef &S) { 18e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar OS << S; 19e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar return OS; 20e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 21e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 22e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbarstd::ostream &operator<<(std::ostream &OS, 23e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar const std::pair<StringRef, StringRef> &P) { 24e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar OS << "(" << P.first << ", " << P.second << ")"; 25e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar return OS; 26e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 27e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 284cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Construction) { 29e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", StringRef()); 30e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", StringRef("hello")); 31e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", StringRef("hello world", 5)); 32e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", StringRef(std::string("hello"))); 334cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 344cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 354cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Iteration) { 364cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar StringRef S("hello"); 374cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar const char *p = "hello"; 384cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar for (const char *it = S.begin(), *ie = S.end(); it != ie; ++it, ++p) 39e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(*it, *p); 404cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 414cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 424cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, StringOps) { 434cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar const char *p = "hello"; 444cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ(p, StringRef(p, 0).data()); 454cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef().empty()); 464cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ((size_t) 5, StringRef("hello").size()); 474cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ(-1, StringRef("aab").compare("aad")); 484cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ( 0, StringRef("aab").compare("aab")); 494cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ( 1, StringRef("aab").compare("aaa")); 504cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ(-1, StringRef("aab").compare("aabb")); 514cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ( 1, StringRef("aab").compare("aa")); 524cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 534cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 544cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Operators) { 55e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", StringRef()); 564cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") < StringRef("aad")); 574cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") < StringRef("aab")); 584cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") <= StringRef("aab")); 594cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") <= StringRef("aaa")); 604cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aad") > StringRef("aab")); 614cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") > StringRef("aab")); 624cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") >= StringRef("aab")); 634cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aaa") >= StringRef("aab")); 64e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef("aab"), StringRef("aab")); 654cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") == StringRef("aac")); 664cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") != StringRef("aab")); 674cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") != StringRef("aac")); 684cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ('a', StringRef("aab")[1]); 694cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 704cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 71e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Substr) { 72f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar StringRef Str("hello"); 73e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("lo", Str.substr(3)); 74e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", Str.substr(100)); 75e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", Str.substr(0, 100)); 76e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("o", Str.substr(4, 10)); 77e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 78e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 79e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Slice) { 80e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 81e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("l", Str.slice(2, 3)); 82e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("ell", Str.slice(1, 4)); 83e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("llo", Str.slice(2, 100)); 84e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", Str.slice(2, 1)); 85e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", Str.slice(10, 20)); 86e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 87e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 88e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Split) { 89e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 90e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")), 91e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('X')); 92e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")), 93e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('e')); 94e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")), 95e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('h')); 96e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("he"), StringRef("lo")), 97e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('l')); 98e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")), 99e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('o')); 100e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 101e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")), 102e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('X')); 103e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")), 104e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('e')); 105e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")), 106e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('h')); 107e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hel"), StringRef("o")), 108e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('l')); 109e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")), 110e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('o')); 111e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 112d61918fc6898a89df8b0a03e068f234ded010cdfDaniel Dunbar 113e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, StartsWith) { 114e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 115f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar EXPECT_TRUE(Str.startswith("he")); 116f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar EXPECT_FALSE(Str.startswith("helloworld")); 117f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar EXPECT_FALSE(Str.startswith("hi")); 118e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 119dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar 120e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Find) { 121e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 122e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(2U, Str.find('l')); 123e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.find('z')); 124e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.find("helloworld")); 125e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.find("hello")); 126e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.find("ello")); 127e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.find("zz")); 128e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 129e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(3U, Str.rfind('l')); 130e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.rfind('z')); 131e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.rfind("helloworld")); 132e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.rfind("hello")); 133e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.rfind("ello")); 134e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.rfind("zz")); 135e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 136e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 137e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Count) { 138e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 139e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(2U, Str.count('l')); 140e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.count('o')); 141e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.count('z')); 142e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.count("helloworld")); 143e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.count("hello")); 144e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.count("ello")); 145e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.count("zz")); 146e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 147e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 148e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Misc) { 149dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar std::string Storage; 150dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar raw_string_ostream OS(Storage); 151dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar OS << StringRef("hello"); 152dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar EXPECT_EQ("hello", OS.str()); 153f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar} 154f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar 1554cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} // end anonymous namespace 156