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(StringView("a"))); 53 ASSERT_TRUE(v.starts_with(StringView("ab"))); 54 ASSERT_TRUE(v.starts_with(StringView("abc"))); 55 ASSERT_TRUE(v.starts_with(StringView())); 56 ASSERT_TRUE(v.starts_with(StringView(""))); 57 ASSERT_FALSE(v.starts_with(StringView("123"))); 58 ASSERT_FALSE(v.starts_with(StringView("abd"))); 59 ASSERT_FALSE(v.starts_with(StringView("aaa"))); 60 ASSERT_FALSE(v.starts_with(StringView("abcde"))); 61 } 62 63 TEST(LlvmLibcStringViewTest, RemovePrefix) { 64 StringView v("123456789"); 65 66 auto p = v.remove_prefix(0); 67 ASSERT_EQ(p.size(), size_t(9)); 68 ASSERT_TRUE(p.equals(StringView("123456789"))); 69 70 p = v.remove_prefix(4); 71 ASSERT_EQ(p.size(), size_t(5)); 72 ASSERT_TRUE(p.equals(StringView("56789"))); 73 74 p = v.remove_prefix(9); 75 ASSERT_EQ(p.size(), size_t(0)); 76 ASSERT_TRUE(p.data() == nullptr); 77 78 p = v.remove_prefix(10); 79 ASSERT_EQ(p.size(), size_t(0)); 80 ASSERT_TRUE(p.data() == nullptr); 81 } 82 83 TEST(LlvmLibcStringViewTest, RemoveSuffix) { 84 StringView v("123456789"); 85 86 auto p = v.remove_suffix(0); 87 ASSERT_EQ(p.size(), size_t(9)); 88 ASSERT_TRUE(p.equals(StringView("123456789"))); 89 90 p = v.remove_suffix(4); 91 ASSERT_EQ(p.size(), size_t(5)); 92 ASSERT_TRUE(p.equals(StringView("12345"))); 93 94 p = v.remove_suffix(9); 95 ASSERT_EQ(p.size(), size_t(0)); 96 ASSERT_TRUE(p.data() == nullptr); 97 98 p = v.remove_suffix(10); 99 ASSERT_EQ(p.size(), size_t(0)); 100 ASSERT_TRUE(p.data() == nullptr); 101 } 102 103 TEST(LlvmLibcStringViewTest, TrimSingleChar) { 104 StringView v(" 123456789 "); 105 auto t = v.trim(' '); 106 ASSERT_EQ(t.size(), size_t(9)); 107 ASSERT_TRUE(t.equals(StringView("123456789"))); 108 109 v = StringView("====12345=="); 110 t = v.trim(' '); 111 ASSERT_EQ(v.size(), size_t(11)); 112 ASSERT_TRUE(t.equals(StringView("====12345=="))); 113 114 t = v.trim('='); 115 ASSERT_EQ(t.size(), size_t(5)); 116 ASSERT_TRUE(t.equals(StringView("12345"))); 117 118 v = StringView("12345==="); 119 t = v.trim('='); 120 ASSERT_EQ(t.size(), size_t(5)); 121 ASSERT_TRUE(t.equals(StringView("12345"))); 122 123 v = StringView("===========12345"); 124 t = v.trim('='); 125 ASSERT_EQ(t.size(), size_t(5)); 126 ASSERT_TRUE(t.equals(StringView("12345"))); 127 128 v = StringView("============"); 129 t = v.trim('='); 130 ASSERT_EQ(t.size(), size_t(0)); 131 ASSERT_TRUE(t.data() == nullptr); 132 133 v = StringView(); 134 t = v.trim(' '); 135 ASSERT_EQ(t.size(), size_t(0)); 136 ASSERT_TRUE(t.data() == nullptr); 137 138 v = StringView(""); 139 t = v.trim(' '); 140 ASSERT_EQ(t.size(), size_t(0)); 141 ASSERT_TRUE(t.data() == nullptr); 142 } 143 144 TEST(LlvmLibcStringViewTest, Observer) { 145 StringView ABC("abc"); 146 ASSERT_EQ(ABC.size(), size_t(3)); 147 ASSERT_FALSE(ABC.empty()); 148 ASSERT_EQ(ABC.front(), 'a'); 149 ASSERT_EQ(ABC.back(), 'c'); 150 } 151 152 bool isDigit(char c) { return c >= '0' && c <= '9'; } 153 154 TEST(LlvmLibcStringViewTest, Transform) { 155 ASSERT_TRUE(StringView("123abc").drop_back(3).equals("123")); 156 ASSERT_TRUE(StringView("123abc").drop_front(3).equals("abc")); 157 ASSERT_TRUE(StringView("123abc").take_back(3).equals("abc")); 158 ASSERT_TRUE(StringView("123abc").take_front(3).equals("123")); 159 160 ASSERT_TRUE(StringView("123abc").take_while(&isDigit).equals("123")); 161 ASSERT_TRUE(StringView("abc123").take_until(&isDigit).equals("abc")); 162 ASSERT_TRUE(StringView("123abc").drop_while(&isDigit).equals("abc")); 163 ASSERT_TRUE(StringView("abc123").drop_until(&isDigit).equals("123")); 164 } 165 166 TEST(LlvmLibcStringViewTest, ConsumeFront) { 167 StringView Tmp("abc"); 168 ASSERT_FALSE(Tmp.consume_front("###")); 169 ASSERT_TRUE(Tmp.consume_front("ab")); 170 ASSERT_TRUE(Tmp.equals("c")); 171 } 172 173 TEST(LlvmLibcStringViewTest, ConsumeBack) { 174 StringView Tmp("abc"); 175 ASSERT_FALSE(Tmp.consume_back("###")); 176 ASSERT_TRUE(Tmp.consume_back("bc")); 177 ASSERT_TRUE(Tmp.equals("a")); 178 } 179