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