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, RemovePrefix) { 49 __llvm_libc::cpp::StringView v("123456789"); 50 51 auto p = v.remove_prefix(0); 52 ASSERT_EQ(p.size(), size_t(9)); 53 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("123456789"))); 54 55 p = v.remove_prefix(4); 56 ASSERT_EQ(p.size(), size_t(5)); 57 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("56789"))); 58 59 p = v.remove_prefix(9); 60 ASSERT_EQ(p.size(), size_t(0)); 61 ASSERT_TRUE(p.data() == nullptr); 62 63 p = v.remove_prefix(10); 64 ASSERT_EQ(p.size(), size_t(0)); 65 ASSERT_TRUE(p.data() == nullptr); 66 } 67 68 TEST(LlvmLibcStringViewTest, RemoveSuffix) { 69 __llvm_libc::cpp::StringView v("123456789"); 70 71 auto p = v.remove_suffix(0); 72 ASSERT_EQ(p.size(), size_t(9)); 73 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("123456789"))); 74 75 p = v.remove_suffix(4); 76 ASSERT_EQ(p.size(), size_t(5)); 77 ASSERT_TRUE(p.equals(__llvm_libc::cpp::StringView("12345"))); 78 79 p = v.remove_suffix(9); 80 ASSERT_EQ(p.size(), size_t(0)); 81 ASSERT_TRUE(p.data() == nullptr); 82 83 p = v.remove_suffix(10); 84 ASSERT_EQ(p.size(), size_t(0)); 85 ASSERT_TRUE(p.data() == nullptr); 86 } 87 88 TEST(LlvmLibcStringViewTest, TrimSingleChar) { 89 __llvm_libc::cpp::StringView v(" 123456789 "); 90 auto t = v.trim(' '); 91 ASSERT_EQ(t.size(), size_t(9)); 92 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("123456789"))); 93 94 v = __llvm_libc::cpp::StringView("====12345=="); 95 t = v.trim(' '); 96 ASSERT_EQ(v.size(), size_t(11)); 97 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("====12345=="))); 98 99 t = v.trim('='); 100 ASSERT_EQ(t.size(), size_t(5)); 101 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("12345"))); 102 103 v = __llvm_libc::cpp::StringView("12345==="); 104 t = v.trim('='); 105 ASSERT_EQ(t.size(), size_t(5)); 106 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("12345"))); 107 108 v = __llvm_libc::cpp::StringView("===========12345"); 109 t = v.trim('='); 110 ASSERT_EQ(t.size(), size_t(5)); 111 ASSERT_TRUE(t.equals(__llvm_libc::cpp::StringView("12345"))); 112 113 v = __llvm_libc::cpp::StringView("============"); 114 t = v.trim('='); 115 ASSERT_EQ(t.size(), size_t(0)); 116 ASSERT_TRUE(t.data() == nullptr); 117 118 v = __llvm_libc::cpp::StringView(); 119 t = v.trim(' '); 120 ASSERT_EQ(t.size(), size_t(0)); 121 ASSERT_TRUE(t.data() == nullptr); 122 123 v = __llvm_libc::cpp::StringView(""); 124 t = v.trim(' '); 125 ASSERT_EQ(t.size(), size_t(0)); 126 ASSERT_TRUE(t.data() == nullptr); 127 } 128