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 TEST(LlvmLibcStringViewTest, InitializeCheck) { 13 __llvm_libc::cpp::StringView v; 14 ASSERT_EQ(v.size(), size_t(0)); 15 ASSERT_TRUE(v.data() == nullptr); 16 17 v = __llvm_libc::cpp::StringView(""); 18 ASSERT_EQ(v.size(), size_t(0)); 19 ASSERT_TRUE(v.data() == nullptr); 20 21 v = __llvm_libc::cpp::StringView(nullptr); 22 ASSERT_EQ(v.size(), size_t(0)); 23 ASSERT_TRUE(v.data() == nullptr); 24 25 v = __llvm_libc::cpp::StringView(nullptr, 10); 26 ASSERT_EQ(v.size(), size_t(0)); 27 ASSERT_TRUE(v.data() == nullptr); 28 29 v = __llvm_libc::cpp::StringView("abc", 0); 30 ASSERT_EQ(v.size(), size_t(0)); 31 ASSERT_TRUE(v.data() == nullptr); 32 33 v = __llvm_libc::cpp::StringView("123456789"); 34 ASSERT_EQ(v.size(), size_t(9)); 35 } 36 37 TEST(LlvmLibcStringViewTest, Equals) { 38 __llvm_libc::cpp::StringView v("abc"); 39 ASSERT_TRUE(v.equals(__llvm_libc::cpp::StringView("abc"))); 40 ASSERT_FALSE(v.equals(__llvm_libc::cpp::StringView())); 41 ASSERT_FALSE(v.equals(__llvm_libc::cpp::StringView(""))); 42 ASSERT_FALSE(v.equals(__llvm_libc::cpp::StringView("123"))); 43 ASSERT_FALSE(v.equals(__llvm_libc::cpp::StringView("abd"))); 44 ASSERT_FALSE(v.equals(__llvm_libc::cpp::StringView("aaa"))); 45 ASSERT_FALSE(v.equals(__llvm_libc::cpp::StringView("abcde"))); 46 } 47 48 TEST(LlvmLibcStringViewTest, startsWith) { 49 __llvm_libc::cpp::StringView v("abc"); 50 ASSERT_TRUE(v.starts_with(__llvm_libc::cpp::StringView("a"))); 51 ASSERT_TRUE(v.starts_with(__llvm_libc::cpp::StringView("ab"))); 52 ASSERT_TRUE(v.starts_with(__llvm_libc::cpp::StringView("abc"))); 53 ASSERT_TRUE(v.starts_with(__llvm_libc::cpp::StringView())); 54 ASSERT_TRUE(v.starts_with(__llvm_libc::cpp::StringView(""))); 55 ASSERT_FALSE(v.starts_with(__llvm_libc::cpp::StringView("123"))); 56 ASSERT_FALSE(v.starts_with(__llvm_libc::cpp::StringView("abd"))); 57 ASSERT_FALSE(v.starts_with(__llvm_libc::cpp::StringView("aaa"))); 58 ASSERT_FALSE(v.starts_with(__llvm_libc::cpp::StringView("abcde"))); 59 } 60 61 TEST(LlvmLibcStringViewTest, RemovePrefix) { 62 __llvm_libc::cpp::StringView v("123456789"); 63 64 auto p = v.remove_prefix(0); 65 ASSERT_EQ(p.size(), size_t(9)); 66 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("123456789"))); 67 68 p = v.remove_prefix(4); 69 ASSERT_EQ(p.size(), size_t(5)); 70 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("56789"))); 71 72 p = v.remove_prefix(9); 73 ASSERT_EQ(p.size(), size_t(0)); 74 ASSERT_TRUE(p.data() == nullptr); 75 76 p = v.remove_prefix(10); 77 ASSERT_EQ(p.size(), size_t(0)); 78 ASSERT_TRUE(p.data() == nullptr); 79 } 80 81 TEST(LlvmLibcStringViewTest, RemoveSuffix) { 82 __llvm_libc::cpp::StringView v("123456789"); 83 84 auto p = v.remove_suffix(0); 85 ASSERT_EQ(p.size(), size_t(9)); 86 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("123456789"))); 87 88 p = v.remove_suffix(4); 89 ASSERT_EQ(p.size(), size_t(5)); 90 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("12345"))); 91 92 p = v.remove_suffix(9); 93 ASSERT_EQ(p.size(), size_t(0)); 94 ASSERT_TRUE(p.data() == nullptr); 95 96 p = v.remove_suffix(10); 97 ASSERT_EQ(p.size(), size_t(0)); 98 ASSERT_TRUE(p.data() == nullptr); 99 } 100 101 TEST(LlvmLibcStringViewTest, TrimSingleChar) { 102 __llvm_libc::cpp::StringView v(" 123456789 "); 103 auto t = v.trim(' '); 104 ASSERT_EQ(t.size(), size_t(9)); 105 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("123456789"))); 106 107 v = __llvm_libc::cpp::StringView("====12345=="); 108 t = v.trim(' '); 109 ASSERT_EQ(v.size(), size_t(11)); 110 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("====12345=="))); 111 112 t = v.trim('='); 113 ASSERT_EQ(t.size(), size_t(5)); 114 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("12345"))); 115 116 v = __llvm_libc::cpp::StringView("12345==="); 117 t = v.trim('='); 118 ASSERT_EQ(t.size(), size_t(5)); 119 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("12345"))); 120 121 v = __llvm_libc::cpp::StringView("===========12345"); 122 t = v.trim('='); 123 ASSERT_EQ(t.size(), size_t(5)); 124 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("12345"))); 125 126 v = __llvm_libc::cpp::StringView("============"); 127 t = v.trim('='); 128 ASSERT_EQ(t.size(), size_t(0)); 129 ASSERT_TRUE(t.data() == nullptr); 130 131 v = __llvm_libc::cpp::StringView(); 132 t = v.trim(' '); 133 ASSERT_EQ(t.size(), size_t(0)); 134 ASSERT_TRUE(t.data() == nullptr); 135 136 v = __llvm_libc::cpp::StringView(""); 137 t = v.trim(' '); 138 ASSERT_EQ(t.size(), size_t(0)); 139 ASSERT_TRUE(t.data() == nullptr); 140 } 141