1 //===-- Unittests for StringView ------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "src/__support/CPP/StringView.h" 10 #include "utils/UnitTest/Test.h" 11 12 using __llvm_libc::cpp::StringView; 13 14 TEST(LlvmLibcStringViewTest, InitializeCheck) { 15 StringView v; 16 ASSERT_EQ(v.size(), size_t(0)); 17 ASSERT_TRUE(v.data() == nullptr); 18 19 v = StringView(""); 20 ASSERT_EQ(v.size(), size_t(0)); 21 ASSERT_TRUE(v.data() == nullptr); 22 23 v = StringView(nullptr); 24 ASSERT_EQ(v.size(), size_t(0)); 25 ASSERT_TRUE(v.data() == nullptr); 26 27 v = StringView(nullptr, 10); 28 ASSERT_EQ(v.size(), size_t(0)); 29 ASSERT_TRUE(v.data() == nullptr); 30 31 v = StringView("abc", 0); 32 ASSERT_EQ(v.size(), size_t(0)); 33 ASSERT_TRUE(v.data() == nullptr); 34 35 v = StringView("123456789"); 36 ASSERT_EQ(v.size(), size_t(9)); 37 } 38 39 TEST(LlvmLibcStringViewTest, Equals) { 40 StringView v("abc"); 41 ASSERT_TRUE(v.equals(StringView("abc"))); 42 ASSERT_FALSE(v.equals(StringView())); 43 ASSERT_FALSE(v.equals(StringView(""))); 44 ASSERT_FALSE(v.equals(StringView("123"))); 45 ASSERT_FALSE(v.equals(StringView("abd"))); 46 ASSERT_FALSE(v.equals(StringView("aaa"))); 47 ASSERT_FALSE(v.equals(StringView("abcde"))); 48 } 49 50 TEST(LlvmLibcStringViewTest, startsWith) { 51 StringView v("abc"); 52 ASSERT_TRUE(v.starts_with('a')); 53 ASSERT_TRUE(v.starts_with(StringView("a"))); 54 ASSERT_TRUE(v.starts_with(StringView("ab"))); 55 ASSERT_TRUE(v.starts_with(StringView("abc"))); 56 ASSERT_TRUE(v.starts_with(StringView())); 57 ASSERT_TRUE(v.starts_with(StringView(""))); 58 ASSERT_FALSE(v.starts_with('1')); 59 ASSERT_FALSE(v.starts_with(StringView("123"))); 60 ASSERT_FALSE(v.starts_with(StringView("abd"))); 61 ASSERT_FALSE(v.starts_with(StringView("aaa"))); 62 ASSERT_FALSE(v.starts_with(StringView("abcde"))); 63 } 64 65 TEST(LlvmLibcStringViewTest, endsWith) { 66 StringView v("abc"); 67 ASSERT_TRUE(v.ends_with('c')); 68 ASSERT_TRUE(v.ends_with(StringView("c"))); 69 ASSERT_TRUE(v.ends_with(StringView("bc"))); 70 ASSERT_TRUE(v.ends_with(StringView("abc"))); 71 ASSERT_TRUE(v.ends_with(StringView())); 72 ASSERT_TRUE(v.ends_with(StringView(""))); 73 ASSERT_FALSE(v.ends_with('1')); 74 ASSERT_FALSE(v.ends_with(StringView("123"))); 75 ASSERT_FALSE(v.ends_with(StringView("abd"))); 76 ASSERT_FALSE(v.ends_with(StringView("aaa"))); 77 ASSERT_FALSE(v.ends_with(StringView("abcde"))); 78 } 79 80 TEST(LlvmLibcStringViewTest, RemovePrefix) { 81 StringView a("123456789"); 82 a.remove_prefix(0); 83 ASSERT_EQ(a.size(), size_t(9)); 84 ASSERT_TRUE(a.equals(StringView("123456789"))); 85 86 StringView b("123456789"); 87 b.remove_prefix(4); 88 ASSERT_EQ(b.size(), size_t(5)); 89 ASSERT_TRUE(b.equals(StringView("56789"))); 90 91 StringView c("123456789"); 92 c.remove_prefix(9); 93 ASSERT_EQ(c.size(), size_t(0)); 94 } 95 96 TEST(LlvmLibcStringViewTest, RemoveSuffix) { 97 StringView a("123456789"); 98 a.remove_suffix(0); 99 ASSERT_EQ(a.size(), size_t(9)); 100 ASSERT_TRUE(a.equals(StringView("123456789"))); 101 102 StringView b("123456789"); 103 b.remove_suffix(4); 104 ASSERT_EQ(b.size(), size_t(5)); 105 ASSERT_TRUE(b.equals(StringView("12345"))); 106 107 StringView c("123456789"); 108 c.remove_suffix(9); 109 ASSERT_EQ(c.size(), size_t(0)); 110 } 111 112 TEST(LlvmLibcStringViewTest, TrimSingleChar) { 113 StringView v(" 123456789 "); 114 auto t = v.trim(' '); 115 ASSERT_EQ(t.size(), size_t(9)); 116 ASSERT_TRUE(t.equals(StringView("123456789"))); 117 118 v = StringView("====12345=="); 119 t = v.trim(' '); 120 ASSERT_EQ(v.size(), size_t(11)); 121 ASSERT_TRUE(t.equals(StringView("====12345=="))); 122 123 t = v.trim('='); 124 ASSERT_EQ(t.size(), size_t(5)); 125 ASSERT_TRUE(t.equals(StringView("12345"))); 126 127 v = StringView("12345==="); 128 t = v.trim('='); 129 ASSERT_EQ(t.size(), size_t(5)); 130 ASSERT_TRUE(t.equals(StringView("12345"))); 131 132 v = StringView("===========12345"); 133 t = v.trim('='); 134 ASSERT_EQ(t.size(), size_t(5)); 135 ASSERT_TRUE(t.equals(StringView("12345"))); 136 137 v = StringView("============"); 138 t = v.trim('='); 139 ASSERT_EQ(t.size(), size_t(0)); 140 ASSERT_TRUE(t.data() == nullptr); 141 142 v = StringView(); 143 t = v.trim(' '); 144 ASSERT_EQ(t.size(), size_t(0)); 145 ASSERT_TRUE(t.data() == nullptr); 146 147 v = StringView(""); 148 t = v.trim(' '); 149 ASSERT_EQ(t.size(), size_t(0)); 150 ASSERT_TRUE(t.data() == nullptr); 151 } 152 153 TEST(LlvmLibcStringViewTest, Observer) { 154 StringView ABC("abc"); 155 ASSERT_EQ(ABC.size(), size_t(3)); 156 ASSERT_FALSE(ABC.empty()); 157 ASSERT_EQ(ABC.front(), 'a'); 158 ASSERT_EQ(ABC.back(), 'c'); 159 } 160 161 bool isDigit(char c) { return c >= '0' && c <= '9'; } 162 163 TEST(LlvmLibcStringViewTest, Transform) { 164 ASSERT_TRUE(StringView("123abc").drop_back(3).equals("123")); 165 ASSERT_TRUE(StringView("123abc").drop_front(3).equals("abc")); 166 ASSERT_TRUE(StringView("123abc").take_back(3).equals("abc")); 167 ASSERT_TRUE(StringView("123abc").take_front(3).equals("123")); 168 169 ASSERT_TRUE(StringView("123abc").take_while(&isDigit).equals("123")); 170 ASSERT_TRUE(StringView("abc123").take_until(&isDigit).equals("abc")); 171 ASSERT_TRUE(StringView("123abc").drop_while(&isDigit).equals("abc")); 172 ASSERT_TRUE(StringView("abc123").drop_until(&isDigit).equals("123")); 173 } 174 175 TEST(LlvmLibcStringViewTest, ConsumeFront) { 176 StringView Tmp("abc"); 177 ASSERT_FALSE(Tmp.consume_front("###")); 178 ASSERT_TRUE(Tmp.consume_front("ab")); 179 ASSERT_TRUE(Tmp.equals("c")); 180 } 181 182 TEST(LlvmLibcStringViewTest, ConsumeBack) { 183 StringView Tmp("abc"); 184 ASSERT_FALSE(Tmp.consume_back("###")); 185 ASSERT_TRUE(Tmp.consume_back("bc")); 186 ASSERT_TRUE(Tmp.equals("a")); 187 } 188 189 TEST(LlvmLibcStringViewTest, FindFirstOf) { 190 StringView Tmp("abca"); 191 ASSERT_TRUE(Tmp.find_first_of('a') == 0); 192 ASSERT_TRUE(Tmp.find_first_of('d') == StringView::npos); 193 ASSERT_TRUE(Tmp.find_first_of('b') == 1); 194 ASSERT_TRUE(Tmp.find_first_of('a', 0) == 0); 195 ASSERT_TRUE(Tmp.find_first_of('b', 1) == 1); 196 ASSERT_TRUE(Tmp.find_first_of('a', 1) == 3); 197 ASSERT_TRUE(Tmp.find_first_of('a', 42) == StringView::npos); 198 ASSERT_FALSE(Tmp.find_first_of('c') == 1); 199 ASSERT_FALSE(Tmp.find_first_of('c', 0) == 1); 200 ASSERT_FALSE(Tmp.find_first_of('c', 1) == 1); 201 } 202