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