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 "utils/CPP/StringView.h"
10 #include "utils/UnitTest/Test.h"
11 
TEST(LlvmLibcStringViewTest,InitializeCheck)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 
TEST(LlvmLibcStringViewTest,Equals)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 
TEST(LlvmLibcStringViewTest,RemovePrefix)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 
TEST(LlvmLibcStringViewTest,RemoveSuffix)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 
TEST(LlvmLibcStringViewTest,TrimSingleChar)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