| //===-- Unittests for StringView ------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "src/__support/CPP/StringView.h" |
| #include "utils/UnitTest/Test.h" |
| |
| using __llvm_libc::cpp::StringView; |
| |
| TEST(LlvmLibcStringViewTest, InitializeCheck) { |
| StringView v; |
| ASSERT_EQ(v.size(), size_t(0)); |
| ASSERT_TRUE(v.data() == nullptr); |
| |
| v = StringView(""); |
| ASSERT_EQ(v.size(), size_t(0)); |
| ASSERT_TRUE(v.data() == nullptr); |
| |
| v = StringView(nullptr); |
| ASSERT_EQ(v.size(), size_t(0)); |
| ASSERT_TRUE(v.data() == nullptr); |
| |
| v = StringView(nullptr, 10); |
| ASSERT_EQ(v.size(), size_t(0)); |
| ASSERT_TRUE(v.data() == nullptr); |
| |
| v = StringView("abc", 0); |
| ASSERT_EQ(v.size(), size_t(0)); |
| ASSERT_TRUE(v.data() == nullptr); |
| |
| v = StringView("123456789"); |
| ASSERT_EQ(v.size(), size_t(9)); |
| } |
| |
| TEST(LlvmLibcStringViewTest, Equals) { |
| StringView v("abc"); |
| ASSERT_TRUE(v.equals(StringView("abc"))); |
| ASSERT_FALSE(v.equals(StringView())); |
| ASSERT_FALSE(v.equals(StringView(""))); |
| ASSERT_FALSE(v.equals(StringView("123"))); |
| ASSERT_FALSE(v.equals(StringView("abd"))); |
| ASSERT_FALSE(v.equals(StringView("aaa"))); |
| ASSERT_FALSE(v.equals(StringView("abcde"))); |
| } |
| |
| TEST(LlvmLibcStringViewTest, startsWith) { |
| StringView v("abc"); |
| ASSERT_TRUE(v.starts_with('a')); |
| ASSERT_TRUE(v.starts_with(StringView("a"))); |
| ASSERT_TRUE(v.starts_with(StringView("ab"))); |
| ASSERT_TRUE(v.starts_with(StringView("abc"))); |
| ASSERT_TRUE(v.starts_with(StringView())); |
| ASSERT_TRUE(v.starts_with(StringView(""))); |
| ASSERT_FALSE(v.starts_with('1')); |
| ASSERT_FALSE(v.starts_with(StringView("123"))); |
| ASSERT_FALSE(v.starts_with(StringView("abd"))); |
| ASSERT_FALSE(v.starts_with(StringView("aaa"))); |
| ASSERT_FALSE(v.starts_with(StringView("abcde"))); |
| } |
| |
| TEST(LlvmLibcStringViewTest, endsWith) { |
| StringView v("abc"); |
| ASSERT_TRUE(v.ends_with('c')); |
| ASSERT_TRUE(v.ends_with(StringView("c"))); |
| ASSERT_TRUE(v.ends_with(StringView("bc"))); |
| ASSERT_TRUE(v.ends_with(StringView("abc"))); |
| ASSERT_TRUE(v.ends_with(StringView())); |
| ASSERT_TRUE(v.ends_with(StringView(""))); |
| ASSERT_FALSE(v.ends_with('1')); |
| ASSERT_FALSE(v.ends_with(StringView("123"))); |
| ASSERT_FALSE(v.ends_with(StringView("abd"))); |
| ASSERT_FALSE(v.ends_with(StringView("aaa"))); |
| ASSERT_FALSE(v.ends_with(StringView("abcde"))); |
| } |
| |
| TEST(LlvmLibcStringViewTest, RemovePrefix) { |
| StringView a("123456789"); |
| a.remove_prefix(0); |
| ASSERT_EQ(a.size(), size_t(9)); |
| ASSERT_TRUE(a.equals(StringView("123456789"))); |
| |
| StringView b("123456789"); |
| b.remove_prefix(4); |
| ASSERT_EQ(b.size(), size_t(5)); |
| ASSERT_TRUE(b.equals(StringView("56789"))); |
| |
| StringView c("123456789"); |
| c.remove_prefix(9); |
| ASSERT_EQ(c.size(), size_t(0)); |
| } |
| |
| TEST(LlvmLibcStringViewTest, RemoveSuffix) { |
| StringView a("123456789"); |
| a.remove_suffix(0); |
| ASSERT_EQ(a.size(), size_t(9)); |
| ASSERT_TRUE(a.equals(StringView("123456789"))); |
| |
| StringView b("123456789"); |
| b.remove_suffix(4); |
| ASSERT_EQ(b.size(), size_t(5)); |
| ASSERT_TRUE(b.equals(StringView("12345"))); |
| |
| StringView c("123456789"); |
| c.remove_suffix(9); |
| ASSERT_EQ(c.size(), size_t(0)); |
| } |
| |
| TEST(LlvmLibcStringViewTest, TrimSingleChar) { |
| StringView v(" 123456789 "); |
| auto t = v.trim(' '); |
| ASSERT_EQ(t.size(), size_t(9)); |
| ASSERT_TRUE(t.equals(StringView("123456789"))); |
| |
| v = StringView("====12345=="); |
| t = v.trim(' '); |
| ASSERT_EQ(v.size(), size_t(11)); |
| ASSERT_TRUE(t.equals(StringView("====12345=="))); |
| |
| t = v.trim('='); |
| ASSERT_EQ(t.size(), size_t(5)); |
| ASSERT_TRUE(t.equals(StringView("12345"))); |
| |
| v = StringView("12345==="); |
| t = v.trim('='); |
| ASSERT_EQ(t.size(), size_t(5)); |
| ASSERT_TRUE(t.equals(StringView("12345"))); |
| |
| v = StringView("===========12345"); |
| t = v.trim('='); |
| ASSERT_EQ(t.size(), size_t(5)); |
| ASSERT_TRUE(t.equals(StringView("12345"))); |
| |
| v = StringView("============"); |
| t = v.trim('='); |
| ASSERT_EQ(t.size(), size_t(0)); |
| ASSERT_TRUE(t.data() == nullptr); |
| |
| v = StringView(); |
| t = v.trim(' '); |
| ASSERT_EQ(t.size(), size_t(0)); |
| ASSERT_TRUE(t.data() == nullptr); |
| |
| v = StringView(""); |
| t = v.trim(' '); |
| ASSERT_EQ(t.size(), size_t(0)); |
| ASSERT_TRUE(t.data() == nullptr); |
| } |
| |
| TEST(LlvmLibcStringViewTest, Observer) { |
| StringView ABC("abc"); |
| ASSERT_EQ(ABC.size(), size_t(3)); |
| ASSERT_FALSE(ABC.empty()); |
| ASSERT_EQ(ABC.front(), 'a'); |
| ASSERT_EQ(ABC.back(), 'c'); |
| } |
| |
| bool isDigit(char c) { return c >= '0' && c <= '9'; } |
| |
| TEST(LlvmLibcStringViewTest, Transform) { |
| ASSERT_TRUE(StringView("123abc").drop_back(3).equals("123")); |
| ASSERT_TRUE(StringView("123abc").drop_front(3).equals("abc")); |
| ASSERT_TRUE(StringView("123abc").take_back(3).equals("abc")); |
| ASSERT_TRUE(StringView("123abc").take_front(3).equals("123")); |
| |
| ASSERT_TRUE(StringView("123abc").take_while(&isDigit).equals("123")); |
| ASSERT_TRUE(StringView("abc123").take_until(&isDigit).equals("abc")); |
| ASSERT_TRUE(StringView("123abc").drop_while(&isDigit).equals("abc")); |
| ASSERT_TRUE(StringView("abc123").drop_until(&isDigit).equals("123")); |
| } |
| |
| TEST(LlvmLibcStringViewTest, ConsumeFront) { |
| StringView Tmp("abc"); |
| ASSERT_FALSE(Tmp.consume_front("###")); |
| ASSERT_TRUE(Tmp.consume_front("ab")); |
| ASSERT_TRUE(Tmp.equals("c")); |
| } |
| |
| TEST(LlvmLibcStringViewTest, ConsumeBack) { |
| StringView Tmp("abc"); |
| ASSERT_FALSE(Tmp.consume_back("###")); |
| ASSERT_TRUE(Tmp.consume_back("bc")); |
| ASSERT_TRUE(Tmp.equals("a")); |
| } |
| |
| TEST(LlvmLibcStringViewTest, FindFirstOf) { |
| StringView Tmp("abca"); |
| ASSERT_TRUE(Tmp.find_first_of('a') == 0); |
| ASSERT_TRUE(Tmp.find_first_of('d') == StringView::npos); |
| ASSERT_TRUE(Tmp.find_first_of('b') == 1); |
| ASSERT_TRUE(Tmp.find_first_of('a', 0) == 0); |
| ASSERT_TRUE(Tmp.find_first_of('b', 1) == 1); |
| ASSERT_TRUE(Tmp.find_first_of('a', 1) == 3); |
| ASSERT_TRUE(Tmp.find_first_of('a', 42) == StringView::npos); |
| ASSERT_FALSE(Tmp.find_first_of('c') == 1); |
| ASSERT_FALSE(Tmp.find_first_of('c', 0) == 1); |
| ASSERT_FALSE(Tmp.find_first_of('c', 1) == 1); |
| } |
| |
| TEST(LlvmLibcStringViewTest, FindLastOf) { |
| StringView Tmp("abada"); |
| |
| ASSERT_EQ(Tmp.find_last_of('a'), size_t(4)); |
| ASSERT_EQ(Tmp.find_last_of('a', 123), size_t(4)); |
| ASSERT_EQ(Tmp.find_last_of('a', 5), size_t(4)); |
| ASSERT_EQ(Tmp.find_last_of('a', 4), size_t(4)); |
| ASSERT_EQ(Tmp.find_last_of('a', 3), size_t(2)); |
| ASSERT_EQ(Tmp.find_last_of('a', 2), size_t(2)); |
| ASSERT_EQ(Tmp.find_last_of('a', 1), size_t(0)); |
| ASSERT_EQ(Tmp.find_last_of('a', 0), size_t(0)); |
| |
| ASSERT_EQ(Tmp.find_last_of('b'), size_t(1)); |
| ASSERT_EQ(Tmp.find_last_of('b', 123), size_t(1)); |
| ASSERT_EQ(Tmp.find_last_of('b', 5), size_t(1)); |
| ASSERT_EQ(Tmp.find_last_of('b', 4), size_t(1)); |
| ASSERT_EQ(Tmp.find_last_of('b', 3), size_t(1)); |
| ASSERT_EQ(Tmp.find_last_of('b', 2), size_t(1)); |
| ASSERT_EQ(Tmp.find_last_of('b', 1), size_t(1)); |
| ASSERT_EQ(Tmp.find_last_of('b', 0), StringView::npos); |
| |
| ASSERT_EQ(Tmp.find_last_of('d'), size_t(3)); |
| ASSERT_EQ(Tmp.find_last_of('d', 123), size_t(3)); |
| ASSERT_EQ(Tmp.find_last_of('d', 5), size_t(3)); |
| ASSERT_EQ(Tmp.find_last_of('d', 4), size_t(3)); |
| ASSERT_EQ(Tmp.find_last_of('d', 3), size_t(3)); |
| ASSERT_EQ(Tmp.find_last_of('d', 2), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('d', 1), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('d', 0), StringView::npos); |
| |
| ASSERT_EQ(Tmp.find_last_of('e'), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('e', 123), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('e', 5), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('e', 4), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('e', 3), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('e', 2), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('e', 1), StringView::npos); |
| ASSERT_EQ(Tmp.find_last_of('e', 0), StringView::npos); |
| |
| StringView Empty; |
| ASSERT_EQ(Empty.find_last_of('a'), StringView::npos); |
| ASSERT_EQ(Empty.find_last_of('a', 0), StringView::npos); |
| ASSERT_EQ(Empty.find_last_of('a', 123), StringView::npos); |
| |
| StringView Empty1(""); |
| ASSERT_EQ(Empty1.find_last_of('a'), StringView::npos); |
| ASSERT_EQ(Empty1.find_last_of('a', 0), StringView::npos); |
| ASSERT_EQ(Empty1.find_last_of('a', 123), StringView::npos); |
| } |