1 //===- llvm/unittest/ADT/StringRefTest.cpp - StringRef unit tests ---------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "gtest/gtest.h" 11 #include "llvm/ADT/StringRef.h" 12 #include "llvm/Support/raw_ostream.h" 13 using namespace llvm; 14 15 namespace { 16 17 TEST(StringRefTest, Construction) { 18 EXPECT_TRUE(StringRef() == ""); 19 EXPECT_TRUE(StringRef("hello") == "hello"); 20 EXPECT_TRUE(StringRef("hello world", 5) == "hello"); 21 EXPECT_TRUE(StringRef(std::string("hello")) == "hello"); 22 } 23 24 TEST(StringRefTest, Iteration) { 25 StringRef S("hello"); 26 const char *p = "hello"; 27 for (const char *it = S.begin(), *ie = S.end(); it != ie; ++it, ++p) 28 EXPECT_TRUE(*p == *it); 29 } 30 31 TEST(StringRefTest, StringOps) { 32 const char *p = "hello"; 33 EXPECT_EQ(p, StringRef(p, 0).data()); 34 EXPECT_TRUE(StringRef().empty()); 35 EXPECT_EQ((size_t) 5, StringRef("hello").size()); 36 EXPECT_EQ(-1, StringRef("aab").compare("aad")); 37 EXPECT_EQ( 0, StringRef("aab").compare("aab")); 38 EXPECT_EQ( 1, StringRef("aab").compare("aaa")); 39 EXPECT_EQ(-1, StringRef("aab").compare("aabb")); 40 EXPECT_EQ( 1, StringRef("aab").compare("aa")); 41 } 42 43 TEST(StringRefTest, Operators) { 44 EXPECT_TRUE(StringRef() == ""); 45 EXPECT_TRUE(StringRef("aab") < StringRef("aad")); 46 EXPECT_FALSE(StringRef("aab") < StringRef("aab")); 47 EXPECT_TRUE(StringRef("aab") <= StringRef("aab")); 48 EXPECT_FALSE(StringRef("aab") <= StringRef("aaa")); 49 EXPECT_TRUE(StringRef("aad") > StringRef("aab")); 50 EXPECT_FALSE(StringRef("aab") > StringRef("aab")); 51 EXPECT_TRUE(StringRef("aab") >= StringRef("aab")); 52 EXPECT_FALSE(StringRef("aaa") >= StringRef("aab")); 53 EXPECT_TRUE(StringRef("aab") == StringRef("aab")); 54 EXPECT_FALSE(StringRef("aab") == StringRef("aac")); 55 EXPECT_FALSE(StringRef("aab") != StringRef("aab")); 56 EXPECT_TRUE(StringRef("aab") != StringRef("aac")); 57 EXPECT_EQ('a', StringRef("aab")[1]); 58 } 59 60 TEST(StringRefTest, Utilities) { 61 StringRef Str("hello"); 62 EXPECT_TRUE(Str.substr(3) == "lo"); 63 EXPECT_TRUE(Str.substr(100) == ""); 64 EXPECT_TRUE(Str.substr(0, 100) == "hello"); 65 EXPECT_TRUE(Str.substr(4, 10) == "o"); 66 67 EXPECT_TRUE(Str.startswith("he")); 68 EXPECT_FALSE(Str.startswith("helloworld")); 69 EXPECT_FALSE(Str.startswith("hi")); 70 71 std::string Storage; 72 raw_string_ostream OS(Storage); 73 OS << StringRef("hello"); 74 EXPECT_EQ("hello", OS.str()); 75 } 76 77 } // end anonymous namespace 78