blob: ddbcc121cf013b6c5a7ce934cf299598c7500ee8 [file] [log] [blame]
Ethan Nicholas2c9a6ec2021-06-07 16:09:59 -04001/*
2 * Copyright 2021 Google LLC.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "include/core/SkStringView.h"
9
10#include "tests/Test.h"
11
12DEF_TEST(SkStringViewConstructors, r) {
13 skstd::string_view empty;
14 REPORTER_ASSERT(r, empty.data() == nullptr);
15 REPORTER_ASSERT(r, empty.length() == 0);
16
17 const char* str = "Hello, World!";
18 skstd::string_view helloWorld(str);
19 REPORTER_ASSERT(r, helloWorld.data() == str);
20 REPORTER_ASSERT(r, helloWorld.length() == strlen(str));
21
22 skstd::string_view hello(str, 5);
23 REPORTER_ASSERT(r, hello.data() == str);
24 REPORTER_ASSERT(r, hello.length() == 5);
25
26 skstd::string_view copy(hello);
27 REPORTER_ASSERT(r, copy.data() == str);
28 REPORTER_ASSERT(r, copy.length() == 5);
29
30 copy = helloWorld;
31 REPORTER_ASSERT(r, copy.data() == str);
32 REPORTER_ASSERT(r, copy.length() == strlen(str));
33}
34
35DEF_TEST(SkStringViewBasics, r) {
36 skstd::string_view empty("");
37 REPORTER_ASSERT(r, empty.empty());
John Stiles2c764e12022-01-31 21:45:35 -050038 REPORTER_ASSERT(r, !skstd::starts_with(empty, 'x'));
39 REPORTER_ASSERT(r, !skstd::ends_with(empty, 'x'));
40 REPORTER_ASSERT(r, !skstd::starts_with(empty, "x"));
41 REPORTER_ASSERT(r, !skstd::ends_with(empty, "x"));
42 REPORTER_ASSERT(r, skstd::starts_with(empty, ""));
43 REPORTER_ASSERT(r, skstd::ends_with(empty, ""));
Ethan Nicholas2c9a6ec2021-06-07 16:09:59 -040044
45 skstd::string_view xyz("xyz");
46 REPORTER_ASSERT(r, !xyz.empty());
47 REPORTER_ASSERT(r, xyz.front() == 'x');
48 REPORTER_ASSERT(r, xyz.back() == 'z');
49 REPORTER_ASSERT(r, xyz.length() == 3);
50
John Stiles2c764e12022-01-31 21:45:35 -050051 REPORTER_ASSERT(r, skstd::starts_with(xyz, 'x'));
52 REPORTER_ASSERT(r, !skstd::starts_with(xyz, 'y'));
53 REPORTER_ASSERT(r, skstd::ends_with(xyz, 'z'));
54 REPORTER_ASSERT(r, !skstd::ends_with(xyz, 'y'));
Ethan Nicholas2c9a6ec2021-06-07 16:09:59 -040055
John Stiles2c764e12022-01-31 21:45:35 -050056 REPORTER_ASSERT(r, skstd::starts_with(xyz, ""));
57 REPORTER_ASSERT(r, skstd::ends_with(xyz, ""));
58 REPORTER_ASSERT(r, skstd::starts_with(xyz, "x"));
59 REPORTER_ASSERT(r, skstd::ends_with(xyz, "z"));
60 REPORTER_ASSERT(r, !skstd::starts_with(xyz, "xa"));
61 REPORTER_ASSERT(r, !skstd::ends_with(xyz, "az"));
62 REPORTER_ASSERT(r, skstd::starts_with(xyz, "xy"));
63 REPORTER_ASSERT(r, skstd::ends_with(xyz, "yz"));
64 REPORTER_ASSERT(r, skstd::starts_with(xyz, "xyz"));
65 REPORTER_ASSERT(r, skstd::ends_with(xyz, "xyz"));
66 REPORTER_ASSERT(r, !skstd::starts_with(xyz, "wxyz"));
67 REPORTER_ASSERT(r, !skstd::ends_with(xyz, "wxyz"));
Ethan Nicholas2c9a6ec2021-06-07 16:09:59 -040068
69 xyz.swap(empty);
70 REPORTER_ASSERT(r, xyz == "");
71 REPORTER_ASSERT(r, empty == "xyz");
72}
73
74DEF_TEST(SkStringViewIterator, r) {
75 skstd::string_view str("abc");
76 skstd::string_view::iterator iter = str.begin();
77 REPORTER_ASSERT(r, *(iter++) == 'a');
78 REPORTER_ASSERT(r, *(iter++) == 'b');
79 REPORTER_ASSERT(r, *(iter++) == 'c');
80 REPORTER_ASSERT(r, iter == str.end());
81 REPORTER_ASSERT(r, *(--iter) == 'c');
82 REPORTER_ASSERT(r, *(--iter) == 'b');
83 REPORTER_ASSERT(r, *(--iter) == 'a');
84 REPORTER_ASSERT(r, iter == str.begin());
85
86 skstd::string_view empty;
87 REPORTER_ASSERT(r, empty.begin() == empty.end());
88}
89
90DEF_TEST(SkStringViewOperators, r) {
91 skstd::string_view empty;
92 REPORTER_ASSERT(r, empty == empty);
93 REPORTER_ASSERT(r, empty == "");
94 REPORTER_ASSERT(r, "" == empty);
95 REPORTER_ASSERT(r, !(empty != ""));
96
97 skstd::string_view str("abc");
98 REPORTER_ASSERT(r, str == str);
99 REPORTER_ASSERT(r, str == "abc");
100 REPORTER_ASSERT(r, "abc" == str);
101 REPORTER_ASSERT(r, str != "");
102 REPORTER_ASSERT(r, "" != str);
103 REPORTER_ASSERT(r, str != "abcd");
104 REPORTER_ASSERT(r, "abcd" != str);
105
106 skstd::string_view str2("abcd");
107 REPORTER_ASSERT(r, str < str2);
108 REPORTER_ASSERT(r, str <= str2);
109 REPORTER_ASSERT(r, str <= str);
110 REPORTER_ASSERT(r, str2 > str);
111 REPORTER_ASSERT(r, str2 >= str);
112 REPORTER_ASSERT(r, str >= str);
113 REPORTER_ASSERT(r, !(str2 < str));
114 REPORTER_ASSERT(r, !(str < str));
115 REPORTER_ASSERT(r, !(str2 <= str));
116 REPORTER_ASSERT(r, !(str > str2));
117 REPORTER_ASSERT(r, !(str > str));
118 REPORTER_ASSERT(r, !(str >= str2));
119
120 REPORTER_ASSERT(r, str < "b");
121 REPORTER_ASSERT(r, str <= "b");
122 REPORTER_ASSERT(r, str <= str);
123 REPORTER_ASSERT(r, "b" > str);
124 REPORTER_ASSERT(r, "b" >= str);
125 REPORTER_ASSERT(r, str >= str);
126 REPORTER_ASSERT(r, !("b" < str));
127 REPORTER_ASSERT(r, !(str < str));
128 REPORTER_ASSERT(r, !("b" <= str));
129 REPORTER_ASSERT(r, !(str > "b"));
130 REPORTER_ASSERT(r, !(str > str));
131 REPORTER_ASSERT(r, !(str >= "b"));
132}
Brian Osmanf80ef382021-09-01 14:57:44 -0400133
134DEF_TEST(SkStringViewSubstr, r) {
135 skstd::string_view xyz("xyz");
136 REPORTER_ASSERT(r, xyz.substr() == xyz);
137 REPORTER_ASSERT(r, xyz.substr(0, 1) == "x");
138 REPORTER_ASSERT(r, xyz.substr(0, 2) == "xy");
139 REPORTER_ASSERT(r, xyz.substr(0, 3) == "xyz");
140 REPORTER_ASSERT(r, xyz.substr(0, 4) == "xyz");
141
142 REPORTER_ASSERT(r, xyz.substr(1) == "yz");
143 REPORTER_ASSERT(r, xyz.substr(1, 1) == "y");
144 REPORTER_ASSERT(r, xyz.substr(1, 2) == "yz");
145 REPORTER_ASSERT(r, xyz.substr(1, 3) == "yz");
146
147 REPORTER_ASSERT(r, xyz.substr(2) == "z");
148 REPORTER_ASSERT(r, xyz.substr(2, 1) == "z");
149 REPORTER_ASSERT(r, xyz.substr(2, 2) == "z");
150
151 REPORTER_ASSERT(r, xyz.substr(0, 0).empty());
152 REPORTER_ASSERT(r, xyz.substr(1, 0).empty());
153 REPORTER_ASSERT(r, xyz.substr(2, 0).empty());
154 REPORTER_ASSERT(r, xyz.substr(3, 0).empty());
155
156 REPORTER_ASSERT(r, xyz.substr(3).empty());
Brian Osmanf80ef382021-09-01 14:57:44 -0400157}
Ethan Nicholas32724122021-09-07 13:49:07 -0400158
159DEF_TEST(SkStringViewFind, r) {
160 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("abcdef") == 0);
161 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("abcdefg") == skstd::string_view::npos);
162 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("") == 0);
163 REPORTER_ASSERT(r, skstd::string_view("").find("") == 0);
164 REPORTER_ASSERT(r, skstd::string_view("").find("a") == skstd::string_view::npos);
165 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("b") == 1);
166 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("f") == 5);
167 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("q") == skstd::string_view::npos);
168 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("bcd") == 1);
169 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("bcd", 2) == skstd::string_view::npos);
170 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("bce") == skstd::string_view::npos);
171 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test") == 3);
172 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test", 1) == 3);
173 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test", 3) == 3);
174 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test", 4) == 10);
175 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test2") == 10);
176 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test3") == 17);
John Stiles2c764e12022-01-31 21:45:35 -0500177}
178
179DEF_TEST(SkStringViewContains, r) {
180 REPORTER_ASSERT(r, skstd::contains("ttttest1tttest2tttest3", "test"));
181 REPORTER_ASSERT(r, skstd::contains("ttttest1tttest2tttest3", "test3"));
182 REPORTER_ASSERT(r, !skstd::contains("ttttest1tttest2tttest3", "test4"));
183 REPORTER_ASSERT(r, skstd::contains("", ""));
184 REPORTER_ASSERT(r, !skstd::contains("", "a"));
185 REPORTER_ASSERT(r, skstd::contains("abcabcd", "abcd"));
186 REPORTER_ASSERT(r, skstd::contains("abc", ""));
187 REPORTER_ASSERT(r, skstd::contains("abc", "a"));
188 REPORTER_ASSERT(r, skstd::contains("abc", "b"));
189 REPORTER_ASSERT(r, skstd::contains("abc", "c"));
190 REPORTER_ASSERT(r, skstd::contains("abc", "ab"));
191 REPORTER_ASSERT(r, skstd::contains("abc", "bc"));
192 REPORTER_ASSERT(r, !skstd::contains("abc", "ac"));
193 REPORTER_ASSERT(r, !skstd::contains("abc", "cb"));
194 REPORTER_ASSERT(r, !skstd::contains("abc", "abcd"));
Ethan Nicholas32724122021-09-07 13:49:07 -0400195}