blob: ba2216debd6ab11684e17e8780a4bb1e8207825b [file] [log] [blame]
Daniel Dunbar4cf95d72009-07-21 07:28:51 +00001//===- 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"
Daniel Dunbardbe77cf2009-07-22 17:13:20 +000012#include "llvm/Support/raw_ostream.h"
Daniel Dunbar4cf95d72009-07-21 07:28:51 +000013using namespace llvm;
14
15namespace {
16
17TEST(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
24TEST(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
31TEST(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
43TEST(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
Daniel Dunbarf5fdf732009-07-21 09:18:49 +000060TEST(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"));
Daniel Dunbardbe77cf2009-07-22 17:13:20 +000070
71 std::string Storage;
72 raw_string_ostream OS(Storage);
73 OS << StringRef("hello");
74 EXPECT_EQ("hello", OS.str());
Daniel Dunbarf5fdf732009-07-21 09:18:49 +000075}
76
Daniel Dunbar4cf95d72009-07-21 07:28:51 +000077} // end anonymous namespace