1#include <c10/util/string_view.h>
2
3#include <gmock/gmock.h>
4
5using c10::string_view;
6
7namespace {
8namespace testutils {
9constexpr bool string_equal(const char* lhs, const char* rhs, size_t size) {
10 return (size == 0) ? true
11 : (*lhs != *rhs) ? false
12 : string_equal(lhs + 1, rhs + 1, size - 1);
13}
14static_assert(string_equal("hi", "hi", 2), "");
15static_assert(string_equal("", "", 0), "");
16static_assert(string_equal("hi", "hi2", 2), "");
17static_assert(string_equal("hi2", "hi", 2), "");
18static_assert(!string_equal("hi", "hi2", 3), "");
19static_assert(!string_equal("hi2", "hi", 3), "");
20static_assert(!string_equal("hi", "ha", 2), "");
21
22template <class Exception, class Functor>
23inline void expectThrows(Functor&& functor, const char* expectMessageContains) {
24 try {
25 std::forward<Functor>(functor)();
26 } catch (const Exception& e) {
27 EXPECT_THAT(e.what(), testing::HasSubstr(expectMessageContains));
28 return;
29 }
30 ADD_FAILURE() << "Expected to throw exception containing \""
31 << expectMessageContains << "\" but didn't throw";
32}
33} // namespace testutils
34
35using testutils::expectThrows;
36using testutils::string_equal;
37
38namespace test_typedefs {
39static_assert(std::is_same<char, string_view::value_type>::value, "");
40static_assert(std::is_same<char*, string_view::pointer>::value, "");
41static_assert(std::is_same<const char*, string_view::const_pointer>::value, "");
42static_assert(std::is_same<char&, string_view::reference>::value, "");
43static_assert(
44 std::is_same<const char&, string_view::const_reference>::value,
45 "");
46static_assert(std::is_same<std::size_t, string_view::size_type>::value, "");
47static_assert(
48 std::is_same<std::ptrdiff_t, string_view::difference_type>::value,
49 "");
50} // namespace test_typedefs
51
52namespace test_default_constructor {
53static_assert(string_view().size() == 0, "");
54static_assert(string_view().data() == nullptr, "");
55static_assert(string_view() == string_view(""), "");
56} // namespace test_default_constructor
57
58namespace test_constchar_constructor {
59static_assert(string_view("").size() == 0, "");
60constexpr string_view hello = "hello";
61static_assert(5 == hello.size(), "");
62static_assert(string_equal("hello", hello.data(), hello.size()), "");
63} // namespace test_constchar_constructor
64
65namespace test_sized_constructor {
66static_assert(string_view("", 0).size() == 0, "");
67constexpr string_view hell("hello", 4);
68static_assert(4 == hell.size(), "");
69static_assert(string_equal("hell", hell.data(), hell.size()), "");
70} // namespace test_sized_constructor
71
72namespace test_string_constructor {
73void test_conversion_is_implicit(string_view a) {}
74TEST(StringViewTest, testStringConstructor) {
75 std::string empty;
76 EXPECT_EQ(0, string_view(empty).size());
77 std::string hello_str = "hello";
78 string_view hello_sv = hello_str;
79 EXPECT_EQ(5, hello_sv.size());
80 EXPECT_TRUE(string_equal("hello", hello_sv.data(), hello_sv.size()));
81
82 test_conversion_is_implicit(hello_str);
83}
84} // namespace test_string_constructor
85
86namespace test_conversion_to_string {
87TEST(StringViewTest, testConversionToString) {
88 string_view empty;
89 EXPECT_EQ(0, std::string(empty).size());
90 string_view hello_sv = "hello";
91 std::string hello_str(hello_sv);
92 EXPECT_EQ(5, hello_str.size());
93 EXPECT_EQ(std::string("hello"), hello_str);
94}
95} // namespace test_conversion_to_string
96
97namespace test_copy_constructor {
98constexpr string_view hello = "hello";
99constexpr string_view copy = hello;
100static_assert(5 == copy.size(), "");
101static_assert(string_equal("hello", copy.data(), copy.size()), "");
102} // namespace test_copy_constructor
103
104namespace test_copy_assignment {
105constexpr string_view assign(string_view value) {
106 string_view result = "temporary_content";
107 result = value; // this is the assignment we're testing
108 return result;
109}
110TEST(StringViewTest, testCopyAssignment) {
111#if defined(__cpp_constexpr) && __cpp_constexpr >= 201304
112 {
113 constexpr string_view hello = assign("hello");
114 static_assert(5 == hello.size(), "");
115 static_assert(string_equal("hello", hello.data(), hello.size()), "");
116
117 static_assert(5 == (string_view() = "hello").size(), "");
118 static_assert(
119 string_equal("hello", (string_view() = "hello").data(), 5), "");
120 }
121#endif
122 const string_view hello = assign("hello");
123 EXPECT_EQ(5, hello.size());
124 EXPECT_EQ("hello", hello);
125 EXPECT_EQ(5, (string_view() = "hello").size());
126 EXPECT_EQ("hello", (string_view() = "hello"));
127}
128
129} // namespace test_copy_assignment
130
131namespace test_iterators {
132static_assert('h' == *string_view("hello").begin(), "");
133static_assert('h' == *string_view("hello").cbegin(), "");
134static_assert('h' == *begin(string_view("hello")), "");
135static_assert('o' == *(string_view("hello").end() - 1), "");
136static_assert('o' == *(string_view("hello").cend() - 1), "");
137static_assert('o' == *(end(string_view("hello")) - 1), "");
138static_assert('o' == *string_view("hello").rbegin(), "");
139static_assert('o' == *string_view("hello").crbegin(), "");
140static_assert('h' == *(string_view("hello").rend() - 1), "");
141static_assert('h' == *(string_view("hello").crend() - 1), "");
142} // namespace test_iterators
143
144namespace test_forward_iteration {
145constexpr string_view hello = "hello";
146static_assert('h' == *(hello.begin() + 0), "");
147static_assert('e' == *(hello.begin() + 1), "");
148static_assert('l' == *(hello.begin() + 2), "");
149static_assert('l' == *(hello.begin() + 3), "");
150static_assert('o' == *(hello.begin() + 4), "");
151static_assert(hello.end() == hello.begin() + 5, "");
152} // namespace test_forward_iteration
153
154namespace test_reverse_iteration {
155constexpr string_view hello = "hello";
156static_assert('o' == *(hello.rbegin() + 0), "");
157static_assert('l' == *(hello.rbegin() + 1), "");
158static_assert('l' == *(hello.rbegin() + 2), "");
159static_assert('e' == *(hello.rbegin() + 3), "");
160static_assert('h' == *(hello.rbegin() + 4), "");
161static_assert(hello.rend() == hello.rbegin() + 5, "");
162} // namespace test_reverse_iteration
163
164namespace test_random_access {
165constexpr string_view hello = "hello";
166static_assert('h' == hello[0], "");
167static_assert('e' == hello[1], "");
168static_assert('l' == hello[2], "");
169static_assert('l' == hello[3], "");
170static_assert('o' == hello[4], "");
171
172static_assert('h' == hello.at(0), "");
173static_assert('e' == hello.at(1), "");
174static_assert('l' == hello.at(2), "");
175static_assert('l' == hello.at(3), "");
176static_assert('o' == hello.at(4), "");
177
178TEST(StringViewTest, whenCallingAccessOperatorOutOfRange_thenThrows) {
179 expectThrows<std::out_of_range>(
180 [] { string_view("").at(1); },
181 "string_view::operator[] or string_view::at() out of range. Index: 1, size: 0");
182
183 expectThrows<std::out_of_range>(
184 [] { string_view("hello").at(5); },
185 "string_view::operator[] or string_view::at() out of range. Index: 5, size: 5");
186
187 expectThrows<std::out_of_range>(
188 [] { string_view("hello").at(100); },
189 "string_view::operator[] or string_view::at() out of range. Index: 100, size: 5");
190
191 expectThrows<std::out_of_range>(
192 [] { string_view("hello").at(string_view::npos); },
193 "string_view::operator[] or string_view::at() out of range. Index: 18446744073709551615, size: 5");
194}
195} // namespace test_random_access
196
197namespace test_front_back {
198static_assert('h' == string_view("hello").front(), "");
199static_assert('o' == string_view("hello").back(), "");
200} // namespace test_front_back
201
202namespace test_data {
203static_assert(string_equal("hello", string_view("hello").data(), 5), "");
204} // namespace test_data
205
206namespace test_size_length {
207static_assert(0 == string_view("").size(), "");
208static_assert(5 == string_view("hello").size(), "");
209
210static_assert(0 == string_view("").length(), "");
211static_assert(5 == string_view("hello").length(), "");
212} // namespace test_size_length
213
214namespace test_empty {
215static_assert(string_view().empty(), "");
216static_assert(string_view("").empty(), "");
217static_assert(!string_view("hello").empty(), "");
218} // namespace test_empty
219
220namespace test_remove_prefix {
221constexpr string_view remove_prefix(string_view input, size_t len) {
222 input.remove_prefix(len);
223 return input;
224}
225
226TEST(StringViewTest, whenRemovingValidPrefix_thenWorks) {
227 static_assert(
228 remove_prefix(string_view("hello"), 0) == string_view("hello"), "");
229 static_assert(
230 remove_prefix(string_view("hello"), 1) == string_view("ello"), "");
231 static_assert(remove_prefix(string_view("hello"), 5) == string_view(""), "");
232
233 EXPECT_EQ(remove_prefix(string_view("hello"), 0), string_view("hello"));
234 EXPECT_EQ(remove_prefix(string_view("hello"), 1), string_view("ello"));
235 EXPECT_EQ(remove_prefix(string_view("hello"), 5), string_view(""));
236}
237
238TEST(StringViewTest, whenRemovingTooLargePrefix_thenThrows) {
239 expectThrows<std::out_of_range>(
240 [] { remove_prefix(string_view("hello"), 6); },
241 "basic_string_view::remove_prefix: out of range. PrefixLength: 6, size: 5");
242}
243} // namespace test_remove_prefix
244
245namespace test_remove_suffix {
246constexpr string_view remove_suffix(string_view input, size_t len) {
247 input.remove_suffix(len);
248 return input;
249}
250
251TEST(StringViewTest, whenRemovingValidSuffix_thenWorks) {
252 static_assert(
253 remove_suffix(string_view("hello"), 0) == string_view("hello"), "");
254 static_assert(
255 remove_suffix(string_view("hello"), 1) == string_view("hell"), "");
256 static_assert(remove_suffix(string_view("hello"), 5) == string_view(""), "");
257
258 EXPECT_EQ(remove_suffix(string_view("hello"), 0), string_view("hello"));
259 EXPECT_EQ(remove_suffix(string_view("hello"), 1), string_view("hell"));
260 EXPECT_EQ(remove_suffix(string_view("hello"), 5), string_view(""));
261}
262
263TEST(StringViewTest, whenRemovingTooLargeSuffix_thenThrows) {
264 expectThrows<std::out_of_range>(
265 [] { remove_suffix(string_view("hello"), 6); },
266 "basic_string_view::remove_suffix: out of range. SuffixLength: 6, size: 5");
267}
268} // namespace test_remove_suffix
269
270namespace test_swap_function {
271constexpr std::pair<string_view, string_view> get() {
272 string_view first = "first";
273 string_view second = "second";
274 swap(first, second);
275 return std::make_pair(first, second);
276}
277TEST(StringViewTest, testSwapFunction) {
278 static_assert(string_view("second") == get().first, "");
279 static_assert(string_view("first") == get().second, "");
280
281 EXPECT_EQ(string_view("second"), get().first);
282 EXPECT_EQ(string_view("first"), get().second);
283}
284} // namespace test_swap_function
285
286namespace test_swap_method {
287constexpr std::pair<string_view, string_view> get() {
288 string_view first = "first";
289 string_view second = "second";
290 first.swap(second);
291 return std::make_pair(first, second);
292}
293TEST(StringViewTest, testSwapMethod) {
294 static_assert(string_view("second") == get().first, "");
295 static_assert(string_view("first") == get().second, "");
296
297 EXPECT_EQ(string_view("second"), get().first);
298 EXPECT_EQ(string_view("first"), get().second);
299}
300} // namespace test_swap_method
301
302namespace test_copy {
303TEST(StringViewTest, whenCopyingFullStringView_thenDestinationHasCorrectData) {
304 string_view data = "hello";
305 // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,cppcoreguidelines-avoid-magic-numbers,modernize-avoid-c-arrays)
306 char result[5];
307 size_t num_copied = data.copy(result, 5);
308 EXPECT_EQ(5, num_copied);
309 EXPECT_TRUE(string_equal("hello", result, 5));
310}
311
312TEST(StringViewTest, whenCopyingSubstr_thenDestinationHasCorrectData) {
313 string_view data = "hello";
314 // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)
315 char result[2];
316 size_t num_copied = data.copy(result, 2, 2);
317 EXPECT_EQ(2, num_copied);
318 EXPECT_TRUE(string_equal("ll", result, 2));
319}
320
321TEST(StringViewTest, whenCopyingTooMuch_thenJustCopiesLess) {
322 string_view data = "hello";
323 // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,cppcoreguidelines-avoid-magic-numbers,modernize-avoid-c-arrays)
324 char result[100];
325 size_t num_copied = data.copy(result, 100, 2);
326 EXPECT_EQ(3, num_copied);
327 EXPECT_TRUE(string_equal("llo", result, 3));
328}
329
330TEST(StringViewTest, whenCopyingJustAtRange_thenDoesntCrash) {
331 string_view data = "hello";
332 // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)
333 char result[1];
334 size_t num_copied = data.copy(result, 2, 5);
335 EXPECT_EQ(0, num_copied);
336}
337
338TEST(StringViewTest, whenCopyingOutOfRange_thenThrows) {
339 string_view data = "hello";
340 // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)
341 char result[2];
342 expectThrows<std::out_of_range>(
343 // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,cppcoreguidelines-avoid-magic-numbers,modernize-avoid-c-arrays)
344 [&] { data.copy(result, 2, 6); },
345 "basic_string_view::copy: out of range. Index: 6, size: 5");
346}
347} // namespace test_copy
348
349namespace test_substr {
350static_assert(string_view("").substr() == string_view(""), "");
351static_assert(string_view("").substr(0) == string_view(""), "");
352static_assert(string_view("").substr(0, 0) == string_view(""), "");
353
354static_assert(string_view("hello").substr() == string_view("hello"), "");
355static_assert(string_view("hello").substr(0) == string_view("hello"), "");
356static_assert(string_view("hello").substr(1) == string_view("ello"), "");
357static_assert(string_view("hello").substr(5) == string_view(""), "");
358
359static_assert(string_view("hello").substr(0, 0) == string_view(""), "");
360static_assert(string_view("hello").substr(0, 2) == string_view("he"), "");
361static_assert(string_view("hello").substr(1, 2) == string_view("el"), "");
362static_assert(string_view("hello").substr(4, 1) == string_view("o"), "");
363
364static_assert(string_view("hello").substr(0, 100) == string_view("hello"), "");
365static_assert(string_view("hello").substr(1, 100) == string_view("ello"), "");
366static_assert(string_view("hello").substr(5, 100) == string_view(""), "");
367
368TEST(StringViewTest, whenCallingSubstrWithPosOutOfRange_thenThrows) {
369 expectThrows<std::out_of_range>(
370 [] { string_view("hello").substr(6); },
371 "basic_string_view::substr parameter out of bounds. Index: 6, size: 5");
372
373 expectThrows<std::out_of_range>(
374 [] { string_view("hello").substr(6, 0); },
375 "basic_string_view::substr parameter out of bounds. Index: 6, size: 5");
376}
377} // namespace test_substr
378
379namespace test_compare_overload1 {
380static_assert(0 == string_view("").compare(string_view("")), "");
381static_assert(0 == string_view("a").compare(string_view("a")), "");
382static_assert(0 == string_view("hello").compare(string_view("hello")), "");
383static_assert(0 < string_view("hello").compare(string_view("")), "");
384static_assert(0 < string_view("hello").compare(string_view("aello")), "");
385static_assert(0 < string_view("hello").compare(string_view("a")), "");
386static_assert(
387 0 < string_view("hello").compare(string_view("abcdefghijklmno")),
388 "");
389static_assert(0 < string_view("hello").compare(string_view("hela")), "");
390static_assert(0 < string_view("hello").compare(string_view("helao")), "");
391static_assert(
392 0 < string_view("hello").compare(string_view("helaobcdefgh")),
393 "");
394static_assert(0 < string_view("hello").compare(string_view("hell")), "");
395static_assert(0 > string_view("").compare(string_view("hello")), "");
396static_assert(0 > string_view("hello").compare(string_view("zello")), "");
397static_assert(0 > string_view("hello").compare(string_view("z")), "");
398static_assert(
399 0 > string_view("hello").compare(string_view("zabcdefghijklmno")),
400 "");
401static_assert(0 > string_view("hello").compare(string_view("helz")), "");
402static_assert(0 > string_view("hello").compare(string_view("helzo")), "");
403static_assert(
404 0 > string_view("hello").compare(string_view("helzobcdefgh")),
405 "");
406static_assert(0 > string_view("hello").compare(string_view("helloa")), "");
407} // namespace test_compare_overload1
408
409namespace test_compare_overload2 {
410static_assert(0 == string_view("").compare(0, 0, string_view("")), "");
411static_assert(0 == string_view("hello").compare(2, 2, string_view("ll")), "");
412static_assert(0 < string_view("hello").compare(2, 2, string_view("l")), "");
413static_assert(0 > string_view("hello").compare(2, 2, string_view("lll")), "");
414static_assert(0 < string_view("hello").compare(2, 2, string_view("la")), "");
415static_assert(0 > string_view("hello").compare(2, 2, string_view("lz")), "");
416} // namespace test_compare_overload2
417
418namespace test_compare_overload3 {
419static_assert(0 == string_view("").compare(0, 0, string_view(""), 0, 0), "");
420static_assert(
421 0 == string_view("hello").compare(2, 2, string_view("hello"), 2, 2),
422 "");
423static_assert(
424 0 < string_view("hello").compare(2, 2, string_view("hello"), 2, 1),
425 "");
426static_assert(
427 0 > string_view("hello").compare(2, 2, string_view("hello"), 2, 3),
428 "");
429static_assert(
430 0 < string_view("hello").compare(2, 2, string_view("hellola"), 5, 2),
431 "");
432static_assert(
433 0 > string_view("hello").compare(2, 2, string_view("hellolz"), 5, 2),
434 "");
435} // namespace test_compare_overload3
436
437namespace test_compare_overload4 {
438static_assert(0 == string_view("").compare(""), "");
439static_assert(0 == string_view("a").compare("a"), "");
440static_assert(0 == string_view("hello").compare("hello"), "");
441static_assert(0 < string_view("hello").compare(""), "");
442static_assert(0 < string_view("hello").compare("aello"), "");
443static_assert(0 < string_view("hello").compare("a"), "");
444static_assert(0 < string_view("hello").compare("abcdefghijklmno"), "");
445static_assert(0 < string_view("hello").compare("hela"), "");
446static_assert(0 < string_view("hello").compare("helao"), "");
447static_assert(0 < string_view("hello").compare("helaobcdefgh"), "");
448static_assert(0 < string_view("hello").compare("hell"), "");
449static_assert(0 > string_view("").compare("hello"), "");
450static_assert(0 > string_view("hello").compare("zello"), "");
451static_assert(0 > string_view("hello").compare("z"), "");
452static_assert(0 > string_view("hello").compare("zabcdefghijklmno"), "");
453static_assert(0 > string_view("hello").compare("helz"), "");
454static_assert(0 > string_view("hello").compare("helzo"), "");
455static_assert(0 > string_view("hello").compare("helzobcdefgh"), "");
456static_assert(0 > string_view("hello").compare("helloa"), "");
457} // namespace test_compare_overload4
458
459namespace test_compare_overload5 {
460static_assert(0 == string_view("").compare(0, 0, ""), "");
461static_assert(0 == string_view("hello").compare(2, 2, "ll"), "");
462static_assert(0 < string_view("hello").compare(2, 2, "l"), "");
463static_assert(0 > string_view("hello").compare(2, 2, "lll"), "");
464static_assert(0 < string_view("hello").compare(2, 2, "la"), "");
465static_assert(0 > string_view("hello").compare(2, 2, "lz"), "");
466} // namespace test_compare_overload5
467
468namespace test_compare_overload6 {
469static_assert(0 == string_view("").compare(0, 0, "", 0, 0), "");
470static_assert(0 == string_view("hello").compare(2, 2, "hello", 2, 2), "");
471static_assert(0 < string_view("hello").compare(2, 2, "hello", 2, 1), "");
472static_assert(0 > string_view("hello").compare(2, 2, "hello", 2, 3), "");
473static_assert(0 < string_view("hello").compare(2, 2, "hellola", 5, 2), "");
474static_assert(0 > string_view("hello").compare(2, 2, "hellolz", 5, 2), "");
475} // namespace test_compare_overload6
476
477namespace test_equality_comparison {
478static_assert(string_view("hi") == string_view("hi"), "");
479static_assert(!(string_view("hi") != string_view("hi")), "");
480
481static_assert(string_view("") == string_view(""), "");
482static_assert(!(string_view("") != string_view("")), "");
483
484static_assert(string_view("hi") != string_view("hi2"), "");
485static_assert(!(string_view("hi") == string_view("hi2")), "");
486
487static_assert(string_view("hi2") != string_view("hi"), "");
488static_assert(!(string_view("hi2") == string_view("hi")), "");
489
490static_assert(string_view("hi") != string_view("ha"), "");
491static_assert(!(string_view("hi") == string_view("ha")), "");
492
493static_assert(string_view("ha") != string_view("hi"), "");
494static_assert(!(string_view("ha") == string_view("hi")), "");
495} // namespace test_equality_comparison
496
497namespace test_less_than {
498static_assert(!(string_view("") < string_view("")), "");
499static_assert(!(string_view("a") < string_view("a")), "");
500static_assert(!(string_view("hello") < string_view("hello")), "");
501static_assert(!(string_view("hello") < string_view("")), "");
502static_assert(!(string_view("hello") < string_view("aello")), "");
503static_assert(!(string_view("hello") < string_view("a")), "");
504static_assert(!(string_view("hello") < string_view("abcdefghijklmno")), "");
505static_assert(!(string_view("hello") < string_view("hela")), "");
506static_assert(!(string_view("hello") < string_view("helao")), "");
507static_assert(!(string_view("hello") < string_view("helaobcdefgh")), "");
508static_assert(!(string_view("hello") < string_view("hell")), "");
509static_assert(string_view("") < string_view("hello"), "");
510static_assert(string_view("hello") < string_view("zello"), "");
511static_assert(string_view("hello") < string_view("z"), "");
512static_assert(string_view("hello") < string_view("zabcdefghijklmno"), "");
513static_assert(string_view("hello") < string_view("helz"), "");
514static_assert(string_view("hello") < string_view("helzo"), "");
515static_assert(string_view("hello") < string_view("helzobcdefgh"), "");
516static_assert(string_view("hello") < string_view("helloa"), "");
517} // namespace test_less_than
518
519namespace test_less_or_equal_than {
520static_assert(string_view("") <= string_view(""), "");
521static_assert(string_view("a") <= string_view("a"), "");
522static_assert(string_view("hello") <= string_view("hello"), "");
523static_assert(!(string_view("hello") <= string_view("")), "");
524static_assert(!(string_view("hello") <= string_view("aello")), "");
525static_assert(!(string_view("hello") <= string_view("a")), "");
526static_assert(!(string_view("hello") <= string_view("abcdefghijklmno")), "");
527static_assert(!(string_view("hello") <= string_view("hela")), "");
528static_assert(!(string_view("hello") <= string_view("helao")), "");
529static_assert(!(string_view("hello") <= string_view("helaobcdefgh")), "");
530static_assert(!(string_view("hello") <= string_view("hell")), "");
531static_assert(string_view("") <= string_view("hello"), "");
532static_assert(string_view("hello") <= string_view("zello"), "");
533static_assert(string_view("hello") <= string_view("z"), "");
534static_assert(string_view("hello") <= string_view("zabcdefghijklmno"), "");
535static_assert(string_view("hello") <= string_view("helz"), "");
536static_assert(string_view("hello") <= string_view("helzo"), "");
537static_assert(string_view("hello") <= string_view("helzobcdefgh"), "");
538static_assert(string_view("hello") <= string_view("helloa"), "");
539} // namespace test_less_or_equal_than
540
541namespace test_greater_than {
542static_assert(!(string_view("") > string_view("")), "");
543static_assert(!(string_view("a") > string_view("a")), "");
544static_assert(!(string_view("hello") > string_view("hello")), "");
545static_assert(string_view("hello") > string_view(""), "");
546static_assert(string_view("hello") > string_view("aello"), "");
547static_assert(string_view("hello") > string_view("a"), "");
548static_assert(string_view("hello") > string_view("abcdefghijklmno"), "");
549static_assert(string_view("hello") > string_view("hela"), "");
550static_assert(string_view("hello") > string_view("helao"), "");
551static_assert(string_view("hello") > string_view("helaobcdefgh"), "");
552static_assert(string_view("hello") > string_view("hell"), "");
553static_assert(!(string_view("") > string_view("hello")), "");
554static_assert(!(string_view("hello") > string_view("zello")), "");
555static_assert(!(string_view("hello") > string_view("z")), "");
556static_assert(!(string_view("hello") > string_view("zabcdefghijklmno")), "");
557static_assert(!(string_view("hello") > string_view("helz")), "");
558static_assert(!(string_view("hello") > string_view("helzo")), "");
559static_assert(!(string_view("hello") > string_view("helzobcdefgh")), "");
560static_assert(!(string_view("hello") > string_view("helloa")), "");
561} // namespace test_greater_than
562
563namespace test_greater_or_equals_than {
564static_assert(string_view("") >= string_view(""), "");
565static_assert(string_view("a") >= string_view("a"), "");
566static_assert(string_view("hello") >= string_view("hello"), "");
567static_assert(string_view("hello") >= string_view(""), "");
568static_assert(string_view("hello") >= string_view("aello"), "");
569static_assert(string_view("hello") >= string_view("a"), "");
570static_assert(string_view("hello") >= string_view("abcdefghijklmno"), "");
571static_assert(string_view("hello") >= string_view("hela"), "");
572static_assert(string_view("hello") >= string_view("helao"), "");
573static_assert(string_view("hello") >= string_view("helaobcdefgh"), "");
574static_assert(string_view("hello") >= string_view("hell"), "");
575static_assert(!(string_view("") >= string_view("hello")), "");
576static_assert(!(string_view("hello") >= string_view("zello")), "");
577static_assert(!(string_view("hello") >= string_view("z")), "");
578static_assert(!(string_view("hello") >= string_view("zabcdefghijklmno")), "");
579static_assert(!(string_view("hello") >= string_view("helz")), "");
580static_assert(!(string_view("hello") >= string_view("helzo")), "");
581static_assert(!(string_view("hello") >= string_view("helzobcdefgh")), "");
582static_assert(!(string_view("hello") >= string_view("helloa")), "");
583} // namespace test_greater_or_equals_than
584
585namespace test_starts_with {
586static_assert(string_view("hi").starts_with(string_view("hi")), "");
587static_assert(string_view("").starts_with(string_view("")), "");
588static_assert(string_view("hi2").starts_with(string_view("")), "");
589static_assert(!string_view("").starts_with(string_view("hi")), "");
590static_assert(string_view("hi2").starts_with(string_view("hi")), "");
591static_assert(!string_view("hi").starts_with(string_view("hi2")), "");
592static_assert(!string_view("hi").starts_with(string_view("ha")), "");
593
594static_assert(string_view("hi").starts_with("hi"), "");
595static_assert(string_view("").starts_with(""), "");
596static_assert(string_view("hi2").starts_with(""), "");
597static_assert(!string_view("").starts_with("hi"), "");
598static_assert(string_view("hi2").starts_with("hi"), "");
599static_assert(!string_view("hi").starts_with("hi2"), "");
600static_assert(!string_view("hi").starts_with("ha"), "");
601
602static_assert(!string_view("").starts_with('a'), "");
603static_assert(!string_view("").starts_with('\0'), "");
604static_assert(!string_view("hello").starts_with('a'), "");
605static_assert(string_view("hello").starts_with('h'), "");
606} // namespace test_starts_with
607
608namespace test_ends_with {
609static_assert(string_view("hi").ends_with(string_view("hi")), "");
610static_assert(string_view("").ends_with(string_view("")), "");
611static_assert(string_view("hi2").ends_with(string_view("")), "");
612static_assert(!string_view("").ends_with(string_view("hi")), "");
613static_assert(string_view("hi2").ends_with(string_view("i2")), "");
614static_assert(!string_view("i2").ends_with(string_view("hi2")), "");
615static_assert(!string_view("hi").ends_with(string_view("ha")), "");
616
617static_assert(string_view("hi").ends_with("hi"), "");
618static_assert(string_view("").ends_with(""), "");
619static_assert(string_view("hi2").ends_with(""), "");
620static_assert(!string_view("").ends_with("hi"), "");
621static_assert(string_view("hi2").ends_with("i2"), "");
622static_assert(!string_view("i2").ends_with("hi2"), "");
623static_assert(!string_view("hi").ends_with("ha"), "");
624
625static_assert(!string_view("").ends_with('a'), "");
626static_assert(!string_view("").ends_with('\0'), "");
627static_assert(!string_view("hello").ends_with('a'), "");
628static_assert(string_view("hello").ends_with('o'), "");
629} // namespace test_ends_with
630
631namespace test_find_overload1 {
632static_assert(0 == string_view("").find(string_view("")), "");
633static_assert(string_view::npos == string_view("").find(string_view("a")), "");
634static_assert(
635 string_view::npos == string_view("").find(string_view(""), 1),
636 "");
637static_assert(0 == string_view("abc").find(string_view("")), "");
638static_assert(2 == string_view("abc").find(string_view(""), 2), "");
639static_assert(0 == string_view("abc").find(string_view("a")), "");
640static_assert(0 == string_view("abc").find(string_view("ab")), "");
641static_assert(0 == string_view("abc").find(string_view("abc")), "");
642static_assert(1 == string_view("abc").find(string_view("bc")), "");
643static_assert(1 == string_view("abc").find(string_view("b")), "");
644static_assert(2 == string_view("abc").find(string_view("c")), "");
645static_assert(0 == string_view("abc").find(string_view("a")), "");
646static_assert(0 == string_view("abc").find(string_view("ab")), "");
647static_assert(0 == string_view("abc").find(string_view("abc")), "");
648static_assert(1 == string_view("ababa").find(string_view("ba")), "");
649static_assert(3 == string_view("ababa").find(string_view("ba"), 2), "");
650static_assert(3 == string_view("ababa").find(string_view("ba"), 3), "");
651static_assert(
652 string_view::npos == string_view("ababa").find(string_view("ba"), 4),
653 "");
654static_assert(
655 string_view::npos == string_view("abc").find(string_view("abcd")),
656 "");
657} // namespace test_find_overload1
658
659namespace test_find_overload2 {
660static_assert(string_view::npos == string_view("").find('a'), "");
661static_assert(0 == string_view("a").find('a'), "");
662static_assert(0 == string_view("abc").find('a'), "");
663static_assert(string_view::npos == string_view("a").find('a', 1), "");
664static_assert(1 == string_view("abc").find('b'), "");
665static_assert(1 == string_view("abc").find('b', 1), "");
666static_assert(string_view::npos == string_view("abc").find('b', 2), "");
667static_assert(2 == string_view("abc").find('c'), "");
668static_assert(2 == string_view("abc").find('c', 1), "");
669static_assert(2 == string_view("abc").find('c', 2), "");
670static_assert(string_view::npos == string_view("abc").find('c', 3), "");
671static_assert(string_view::npos == string_view("abc").find('a', 100), "");
672static_assert(string_view::npos == string_view("abc").find('z'), "");
673static_assert(0 == string_view("ababa").find('a'), "");
674static_assert(0 == string_view("ababa").find('a', 0), "");
675static_assert(2 == string_view("ababa").find('a', 1), "");
676static_assert(2 == string_view("ababa").find('a', 2), "");
677static_assert(4 == string_view("ababa").find('a', 3), "");
678static_assert(4 == string_view("ababa").find('a', 4), "");
679static_assert(string_view::npos == string_view("ababa").find('a', 5), "");
680} // namespace test_find_overload2
681
682namespace test_find_overload3 {
683static_assert(0 == string_view("").find("", 0, 0), "");
684static_assert(string_view::npos == string_view("").find("a", 0, 1), "");
685static_assert(string_view::npos == string_view("").find("", 1, 0), "");
686static_assert(0 == string_view("abc").find("", 0, 0), "");
687static_assert(2 == string_view("abc").find("", 2, 0), "");
688static_assert(0 == string_view("abc").find("a", 0, 1), "");
689static_assert(0 == string_view("abc").find("ab", 0, 2), "");
690static_assert(0 == string_view("abc").find("abc", 0, 3), "");
691static_assert(1 == string_view("abc").find("bc", 0, 2), "");
692static_assert(1 == string_view("abc").find("b", 0, 1), "");
693static_assert(2 == string_view("abc").find("c", 0, 1), "");
694static_assert(0 == string_view("abc").find("a", 0, 1), "");
695static_assert(0 == string_view("abc").find("ab", 0, 2), "");
696static_assert(0 == string_view("abc").find("abc", 0, 3), "");
697static_assert(1 == string_view("ababa").find("ba", 0, 2), "");
698static_assert(3 == string_view("ababa").find("ba", 2, 2), "");
699static_assert(3 == string_view("ababa").find("ba", 3, 2), "");
700static_assert(string_view::npos == string_view("ababa").find("ba", 4, 2), "");
701static_assert(string_view::npos == string_view("abc").find("abcd", 0, 4), "");
702} // namespace test_find_overload3
703
704namespace test_find_overload4 {
705static_assert(0 == string_view("").find(""), "");
706static_assert(string_view::npos == string_view("").find("a"), "");
707static_assert(string_view::npos == string_view("").find("", 1), "");
708static_assert(0 == string_view("abc").find(""), "");
709static_assert(2 == string_view("abc").find("", 2), "");
710static_assert(0 == string_view("abc").find("a"), "");
711static_assert(0 == string_view("abc").find("ab"), "");
712static_assert(0 == string_view("abc").find("abc"), "");
713static_assert(1 == string_view("abc").find("bc"), "");
714static_assert(1 == string_view("abc").find("b"), "");
715static_assert(2 == string_view("abc").find("c"), "");
716static_assert(0 == string_view("abc").find("a"), "");
717static_assert(0 == string_view("abc").find("ab"), "");
718static_assert(0 == string_view("abc").find("abc"), "");
719static_assert(1 == string_view("ababa").find("ba"), "");
720static_assert(3 == string_view("ababa").find("ba", 2), "");
721static_assert(3 == string_view("ababa").find("ba", 3), "");
722static_assert(string_view::npos == string_view("ababa").find("ba", 4), "");
723static_assert(string_view::npos == string_view("abc").find("abcd"), "");
724} // namespace test_find_overload4
725
726namespace test_rfind_overload1 {
727static_assert(0 == string_view("").rfind(string_view("")), "");
728static_assert(string_view::npos == string_view("").rfind(string_view("a")), "");
729static_assert(0 == string_view("").rfind(string_view(""), 1), "");
730static_assert(3 == string_view("abc").rfind(string_view("")), "");
731static_assert(0 == string_view("abc").rfind(string_view(""), 0), "");
732static_assert(0 == string_view("abc").rfind(string_view("a")), "");
733static_assert(0 == string_view("abc").rfind(string_view("ab")), "");
734static_assert(0 == string_view("abc").rfind(string_view("abc")), "");
735static_assert(1 == string_view("abc").rfind(string_view("bc")), "");
736static_assert(1 == string_view("abc").rfind(string_view("b")), "");
737static_assert(2 == string_view("abc").rfind(string_view("c")), "");
738static_assert(0 == string_view("abc").rfind(string_view("a")), "");
739static_assert(0 == string_view("abc").rfind(string_view("ab")), "");
740static_assert(0 == string_view("abc").rfind(string_view("abc")), "");
741static_assert(3 == string_view("ababa").rfind(string_view("ba")), "");
742static_assert(1 == string_view("ababa").rfind(string_view("ba"), 2), "");
743static_assert(1 == string_view("ababa").rfind(string_view("ba"), 1), "");
744static_assert(
745 string_view::npos == string_view("ababa").rfind(string_view("ba"), 0),
746 "");
747static_assert(
748 string_view::npos == string_view("abc").rfind(string_view("abcd")),
749 "");
750} // namespace test_rfind_overload1
751
752namespace test_rfind_overload2 {
753static_assert(string_view::npos == string_view("").rfind('a'), "");
754static_assert(0 == string_view("a").rfind('a'), "");
755static_assert(0 == string_view("abc").rfind('a'), "");
756static_assert(0 == string_view("a").rfind('a', 0), "");
757static_assert(1 == string_view("abc").rfind('b'), "");
758static_assert(string_view::npos == string_view("abc").rfind('b', 0), "");
759static_assert(1 == string_view("abc").rfind('b', 1), "");
760static_assert(2 == string_view("abc").rfind('c'), "");
761static_assert(string_view::npos == string_view("abc").rfind('c', 0), "");
762static_assert(string_view::npos == string_view("abc").rfind('c', 1), "");
763static_assert(2 == string_view("abc").rfind('c', 2), "");
764static_assert(2 == string_view("abc").rfind('c', 3), "");
765static_assert(0 == string_view("abc").rfind('a', 100), "");
766static_assert(string_view::npos == string_view("abc").rfind('z'), "");
767static_assert(4 == string_view("ababa").rfind('a'), "");
768static_assert(0 == string_view("ababa").rfind('a', 0), "");
769static_assert(0 == string_view("ababa").rfind('a', 1), "");
770static_assert(2 == string_view("ababa").rfind('a', 2), "");
771static_assert(2 == string_view("ababa").rfind('a', 3), "");
772static_assert(4 == string_view("ababa").rfind('a', 4), "");
773static_assert(4 == string_view("ababa").rfind('a', 5), "");
774} // namespace test_rfind_overload2
775
776namespace test_rfind_overload3 {
777static_assert(0 == string_view("").rfind("", string_view::npos, 0), "");
778static_assert(
779 string_view::npos == string_view("").rfind("a", string_view::npos, 1),
780 "");
781static_assert(0 == string_view("").rfind("", 1, 0), "");
782static_assert(3 == string_view("abc").rfind("", string_view::npos, 0), "");
783static_assert(0 == string_view("abc").rfind("", 0, 0), "");
784static_assert(0 == string_view("abc").rfind("a", string_view::npos, 1), "");
785static_assert(0 == string_view("abc").rfind("ab", string_view::npos, 2), "");
786static_assert(0 == string_view("abc").rfind("abc", string_view::npos, 3), "");
787static_assert(1 == string_view("abc").rfind("bc", string_view::npos, 2), "");
788static_assert(1 == string_view("abc").rfind("b", string_view::npos, 1), "");
789static_assert(2 == string_view("abc").rfind("c", string_view::npos, 1), "");
790static_assert(0 == string_view("abc").rfind("a", string_view::npos, 1), "");
791static_assert(0 == string_view("abc").rfind("ab", string_view::npos, 2), "");
792static_assert(0 == string_view("abc").rfind("abc", string_view::npos, 3), "");
793static_assert(3 == string_view("ababa").rfind("ba", string_view::npos, 2), "");
794static_assert(1 == string_view("ababa").rfind("ba", 2, 2), "");
795static_assert(1 == string_view("ababa").rfind("ba", 1, 2), "");
796static_assert(string_view::npos == string_view("ababa").rfind("ba", 0, 2), "");
797static_assert(
798 string_view::npos == string_view("abc").rfind("abcd", string_view::npos, 4),
799 "");
800} // namespace test_rfind_overload3
801
802namespace test_rfind_overload4 {
803static_assert(0 == string_view("").rfind(""), "");
804static_assert(string_view::npos == string_view("").rfind("a"), "");
805static_assert(0 == string_view("").rfind("", 1), "");
806static_assert(3 == string_view("abc").rfind(""), "");
807static_assert(0 == string_view("abc").rfind("", 0), "");
808static_assert(0 == string_view("abc").rfind("a"), "");
809static_assert(0 == string_view("abc").rfind("ab"), "");
810static_assert(0 == string_view("abc").rfind("abc"), "");
811static_assert(1 == string_view("abc").rfind("bc"), "");
812static_assert(1 == string_view("abc").rfind("b"), "");
813static_assert(2 == string_view("abc").rfind("c"), "");
814static_assert(0 == string_view("abc").rfind("a"), "");
815static_assert(0 == string_view("abc").rfind("ab"), "");
816static_assert(0 == string_view("abc").rfind("abc"), "");
817static_assert(3 == string_view("ababa").rfind("ba"), "");
818static_assert(1 == string_view("ababa").rfind("ba", 2), "");
819static_assert(1 == string_view("ababa").rfind("ba", 1), "");
820static_assert(string_view::npos == string_view("ababa").rfind("ba", 0), "");
821static_assert(string_view::npos == string_view("abc").rfind("abcd"), "");
822} // namespace test_rfind_overload4
823
824namespace test_find_first_of_overload1 {
825static_assert(
826 string_view::npos == string_view("").find_first_of(string_view("")),
827 "");
828static_assert(
829 string_view::npos == string_view("").find_first_of(string_view("a")),
830 "");
831static_assert(
832 string_view::npos == string_view("").find_first_of(string_view("abc")),
833 "");
834static_assert(
835 string_view::npos == string_view("abc").find_first_of(string_view("")),
836 "");
837static_assert(
838 string_view::npos == string_view("abc").find_first_of(string_view("d")),
839 "");
840static_assert(
841 string_view::npos == string_view("abc").find_first_of(string_view("def")),
842 "");
843
844static_assert(0 == string_view("abcabc").find_first_of(string_view("a")), "");
845static_assert(1 == string_view("abcabc").find_first_of(string_view("b")), "");
846static_assert(2 == string_view("abcabc").find_first_of(string_view("c")), "");
847static_assert(1 == string_view("abcabc").find_first_of(string_view("bc")), "");
848static_assert(1 == string_view("abcabc").find_first_of(string_view("cbd")), "");
849
850static_assert(
851 string_view::npos == string_view("").find_first_of(string_view(""), 1),
852 "");
853static_assert(
854 string_view::npos == string_view("").find_first_of(string_view("a"), 1),
855 "");
856static_assert(
857 string_view::npos == string_view("").find_first_of(string_view("abc"), 100),
858 "");
859static_assert(
860 string_view::npos == string_view("abc").find_first_of(string_view(""), 1),
861 "");
862static_assert(
863 string_view::npos == string_view("abc").find_first_of(string_view("d"), 3),
864 "");
865static_assert(
866 string_view::npos ==
867 string_view("abc").find_first_of(string_view("def"), 2),
868 "");
869
870static_assert(
871 3 == string_view("abcabc").find_first_of(string_view("a"), 1),
872 "");
873static_assert(
874 4 == string_view("abcabc").find_first_of(string_view("b"), 3),
875 "");
876static_assert(
877 5 == string_view("abcabc").find_first_of(string_view("c"), 5),
878 "");
879static_assert(
880 4 == string_view("abcabc").find_first_of(string_view("bc"), 3),
881 "");
882static_assert(
883 4 == string_view("abcabc").find_first_of(string_view("cbd"), 4),
884 "");
885} // namespace test_find_first_of_overload1
886
887namespace test_find_first_of_overload2 {
888static_assert(string_view::npos == string_view("").find_first_of('a'), "");
889static_assert(0 == string_view("a").find_first_of('a'), "");
890static_assert(0 == string_view("abc").find_first_of('a'), "");
891static_assert(string_view::npos == string_view("a").find_first_of('a', 1), "");
892static_assert(1 == string_view("abc").find_first_of('b'), "");
893static_assert(1 == string_view("abc").find_first_of('b', 1), "");
894static_assert(
895 string_view::npos == string_view("abc").find_first_of('b', 2),
896 "");
897static_assert(2 == string_view("abc").find_first_of('c'), "");
898static_assert(2 == string_view("abc").find_first_of('c', 1), "");
899static_assert(2 == string_view("abc").find_first_of('c', 2), "");
900static_assert(
901 string_view::npos == string_view("abc").find_first_of('c', 3),
902 "");
903static_assert(
904 string_view::npos == string_view("abc").find_first_of('a', 100),
905 "");
906static_assert(string_view::npos == string_view("abc").find_first_of('z'), "");
907static_assert(0 == string_view("ababa").find_first_of('a'), "");
908static_assert(0 == string_view("ababa").find_first_of('a', 0), "");
909static_assert(2 == string_view("ababa").find_first_of('a', 1), "");
910static_assert(2 == string_view("ababa").find_first_of('a', 2), "");
911static_assert(4 == string_view("ababa").find_first_of('a', 3), "");
912static_assert(4 == string_view("ababa").find_first_of('a', 4), "");
913static_assert(
914 string_view::npos == string_view("ababa").find_first_of('a', 5),
915 "");
916} // namespace test_find_first_of_overload2
917
918namespace test_find_first_of_overload3 {
919static_assert(
920 string_view::npos == string_view("").find_first_of("ab", 0, 0),
921 "");
922static_assert(
923 string_view::npos == string_view("").find_first_of("abc", 0, 1),
924 "");
925static_assert(
926 string_view::npos == string_view("").find_first_of("abcdef", 0, 3),
927 "");
928static_assert(
929 string_view::npos == string_view("abc").find_first_of("abcdef", 0, 0),
930 "");
931static_assert(
932 string_view::npos == string_view("abc").find_first_of("defa", 0, 1),
933 "");
934static_assert(
935 string_view::npos == string_view("abc").find_first_of("defabc", 0, 3),
936 "");
937
938static_assert(0 == string_view("abcabc").find_first_of("abc", 0, 1), "");
939static_assert(1 == string_view("abcabc").find_first_of("bac", 0, 1), "");
940static_assert(2 == string_view("abcabc").find_first_of("cab", 0, 1), "");
941static_assert(1 == string_view("abcabc").find_first_of("bccda", 0, 2), "");
942static_assert(1 == string_view("abcabc").find_first_of("cbdab", 0, 3), "");
943
944static_assert(
945 string_view::npos == string_view("").find_first_of("ab", 1, 0),
946 "");
947static_assert(
948 string_view::npos == string_view("").find_first_of("abc", 1, 1),
949 "");
950static_assert(
951 string_view::npos == string_view("").find_first_of("abcdef", 100, 3),
952 "");
953static_assert(
954 string_view::npos == string_view("abc").find_first_of("abcdef", 1, 0),
955 "");
956static_assert(
957 string_view::npos == string_view("abc").find_first_of("defa", 3, 1),
958 "");
959static_assert(
960 string_view::npos == string_view("abc").find_first_of("defabc", 2, 3),
961 "");
962
963static_assert(3 == string_view("abcabc").find_first_of("abc", 1, 1), "");
964static_assert(4 == string_view("abcabc").find_first_of("bac", 3, 1), "");
965static_assert(5 == string_view("abcabc").find_first_of("cab", 5, 1), "");
966static_assert(4 == string_view("abcabc").find_first_of("bccda", 3, 2), "");
967static_assert(4 == string_view("abcabc").find_first_of("cbdab", 4, 3), "");
968} // namespace test_find_first_of_overload3
969
970namespace test_find_first_of_overload4 {
971static_assert(string_view::npos == string_view("").find_first_of(""), "");
972static_assert(string_view::npos == string_view("").find_first_of("a"), "");
973static_assert(string_view::npos == string_view("").find_first_of("abc"), "");
974static_assert(string_view::npos == string_view("abc").find_first_of(""), "");
975static_assert(string_view::npos == string_view("abc").find_first_of("d"), "");
976static_assert(string_view::npos == string_view("abc").find_first_of("def"), "");
977
978static_assert(0 == string_view("abcabc").find_first_of("a"), "");
979static_assert(1 == string_view("abcabc").find_first_of("b"), "");
980static_assert(2 == string_view("abcabc").find_first_of("c"), "");
981static_assert(1 == string_view("abcabc").find_first_of("bc"), "");
982static_assert(1 == string_view("abcabc").find_first_of("cbd"), "");
983
984static_assert(string_view::npos == string_view("").find_first_of("", 1), "");
985static_assert(string_view::npos == string_view("").find_first_of("a", 1), "");
986static_assert(
987 string_view::npos == string_view("").find_first_of("abc", 100),
988 "");
989static_assert(string_view::npos == string_view("abc").find_first_of("", 1), "");
990static_assert(
991 string_view::npos == string_view("abc").find_first_of("d", 3),
992 "");
993static_assert(
994 string_view::npos == string_view("abc").find_first_of("def", 2),
995 "");
996
997static_assert(3 == string_view("abcabc").find_first_of("a", 1), "");
998static_assert(4 == string_view("abcabc").find_first_of("b", 3), "");
999static_assert(5 == string_view("abcabc").find_first_of("c", 5), "");
1000static_assert(4 == string_view("abcabc").find_first_of("bc", 3), "");
1001static_assert(4 == string_view("abcabc").find_first_of("cbd", 4), "");
1002} // namespace test_find_first_of_overload4
1003
1004namespace test_find_last_of_overload1 {
1005static_assert(
1006 string_view::npos == string_view("").find_last_of(string_view("")),
1007 "");
1008static_assert(
1009 string_view::npos == string_view("").find_last_of(string_view("a")),
1010 "");
1011static_assert(
1012 string_view::npos == string_view("").find_last_of(string_view("abc")),
1013 "");
1014static_assert(
1015 string_view::npos == string_view("abc").find_last_of(string_view("")),
1016 "");
1017static_assert(
1018 string_view::npos == string_view("abc").find_last_of(string_view("d")),
1019 "");
1020static_assert(
1021 string_view::npos == string_view("abc").find_last_of(string_view("def")),
1022 "");
1023
1024static_assert(3 == string_view("abcabc").find_last_of(string_view("a")), "");
1025static_assert(4 == string_view("abcabc").find_last_of(string_view("b")), "");
1026static_assert(5 == string_view("abcabc").find_last_of(string_view("c")), "");
1027static_assert(5 == string_view("abcabc").find_last_of(string_view("bc")), "");
1028static_assert(5 == string_view("abcabc").find_last_of(string_view("cbd")), "");
1029
1030static_assert(
1031 string_view::npos == string_view("").find_last_of(string_view(""), 1),
1032 "");
1033static_assert(
1034 string_view::npos == string_view("").find_last_of(string_view("a"), 0),
1035 "");
1036static_assert(
1037 string_view::npos == string_view("").find_last_of(string_view("abc"), 100),
1038 "");
1039static_assert(
1040 string_view::npos == string_view("abc").find_last_of(string_view(""), 1),
1041 "");
1042static_assert(
1043 string_view::npos == string_view("abc").find_last_of(string_view("d"), 3),
1044 "");
1045static_assert(
1046 string_view::npos == string_view("abc").find_last_of(string_view("def"), 2),
1047 "");
1048
1049static_assert(0 == string_view("abcabc").find_last_of(string_view("a"), 2), "");
1050static_assert(1 == string_view("abcabc").find_last_of(string_view("b"), 3), "");
1051static_assert(2 == string_view("abcabc").find_last_of(string_view("c"), 2), "");
1052static_assert(
1053 2 == string_view("abcabc").find_last_of(string_view("bc"), 3),
1054 "");
1055static_assert(
1056 2 == string_view("abcabc").find_last_of(string_view("cbd"), 2),
1057 "");
1058} // namespace test_find_last_of_overload1
1059
1060namespace test_find_last_of_overload2 {
1061static_assert(string_view::npos == string_view("").find_last_of('a'), "");
1062static_assert(0 == string_view("a").find_last_of('a'), "");
1063static_assert(0 == string_view("abc").find_last_of('a'), "");
1064static_assert(0 == string_view("a").find_last_of('a', 0), "");
1065static_assert(1 == string_view("abc").find_last_of('b'), "");
1066static_assert(string_view::npos == string_view("abc").find_last_of('b', 0), "");
1067static_assert(1 == string_view("abc").find_last_of('b', 1), "");
1068static_assert(2 == string_view("abc").find_last_of('c'), "");
1069static_assert(string_view::npos == string_view("abc").find_last_of('c', 0), "");
1070static_assert(string_view::npos == string_view("abc").find_last_of('c', 1), "");
1071static_assert(2 == string_view("abc").find_last_of('c', 2), "");
1072static_assert(2 == string_view("abc").find_last_of('c', 3), "");
1073static_assert(0 == string_view("abc").find_last_of('a', 100), "");
1074static_assert(string_view::npos == string_view("abc").find_last_of('z'), "");
1075static_assert(4 == string_view("ababa").find_last_of('a'), "");
1076static_assert(0 == string_view("ababa").find_last_of('a', 0), "");
1077static_assert(0 == string_view("ababa").find_last_of('a', 1), "");
1078static_assert(2 == string_view("ababa").find_last_of('a', 2), "");
1079static_assert(2 == string_view("ababa").find_last_of('a', 3), "");
1080static_assert(4 == string_view("ababa").find_last_of('a', 4), "");
1081static_assert(4 == string_view("ababa").find_last_of('a', 5), "");
1082} // namespace test_find_last_of_overload2
1083
1084namespace test_find_last_of_overload3 {
1085static_assert(
1086 string_view::npos ==
1087 string_view("").find_last_of("ab", string_view::npos, 0),
1088 "");
1089static_assert(
1090 string_view::npos ==
1091 string_view("").find_last_of("abc", string_view::npos, 1),
1092 "");
1093static_assert(
1094 string_view::npos ==
1095 string_view("").find_last_of("abcdef", string_view::npos, 3),
1096 "");
1097static_assert(
1098 string_view::npos ==
1099 string_view("abc").find_last_of("abcdef", string_view::npos, 0),
1100 "");
1101static_assert(
1102 string_view::npos ==
1103 string_view("abc").find_last_of("defa", string_view::npos, 1),
1104 "");
1105static_assert(
1106 string_view::npos ==
1107 string_view("abc").find_last_of("defcba", string_view::npos, 3),
1108 "");
1109
1110static_assert(
1111 3 == string_view("abcabc").find_last_of("abc", string_view::npos, 1),
1112 "");
1113static_assert(
1114 4 == string_view("abcabc").find_last_of("bca", string_view::npos, 1),
1115 "");
1116static_assert(
1117 5 == string_view("abcabc").find_last_of("cab", string_view::npos, 1),
1118 "");
1119static_assert(
1120 5 == string_view("abcabc").find_last_of("bcab", string_view::npos, 2),
1121 "");
1122static_assert(
1123 5 == string_view("abcabc").find_last_of("cbdac", string_view::npos, 3),
1124 "");
1125
1126static_assert(
1127 string_view::npos == string_view("").find_last_of("ab", 1, 0),
1128 "");
1129static_assert(
1130 string_view::npos == string_view("").find_last_of("abc", 0, 1),
1131 "");
1132static_assert(
1133 string_view::npos == string_view("").find_last_of("abcdef", 100, 3),
1134 "");
1135static_assert(
1136 string_view::npos == string_view("abc").find_last_of("abcdef", 1, 0),
1137 "");
1138static_assert(
1139 string_view::npos == string_view("abc").find_last_of("defa", 3, 1),
1140 "");
1141static_assert(
1142 string_view::npos == string_view("abc").find_last_of("defcba", 2, 3),
1143 "");
1144
1145static_assert(0 == string_view("abcabc").find_last_of("abc", 2, 1), "");
1146static_assert(1 == string_view("abcabc").find_last_of("bca", 3, 1), "");
1147static_assert(2 == string_view("abcabc").find_last_of("cab", 2, 1), "");
1148static_assert(2 == string_view("abcabc").find_last_of("bcab", 3, 2), "");
1149static_assert(2 == string_view("abcabc").find_last_of("cbdac", 2, 2), "");
1150} // namespace test_find_last_of_overload3
1151
1152namespace test_find_last_of_overload4 {
1153static_assert(string_view::npos == string_view("").find_last_of(""), "");
1154static_assert(string_view::npos == string_view("").find_last_of("a"), "");
1155static_assert(string_view::npos == string_view("").find_last_of("abc"), "");
1156static_assert(string_view::npos == string_view("abc").find_last_of(""), "");
1157static_assert(string_view::npos == string_view("abc").find_last_of("d"), "");
1158static_assert(string_view::npos == string_view("abc").find_last_of("def"), "");
1159
1160static_assert(3 == string_view("abcabc").find_last_of("a"), "");
1161static_assert(4 == string_view("abcabc").find_last_of("b"), "");
1162static_assert(5 == string_view("abcabc").find_last_of("c"), "");
1163static_assert(5 == string_view("abcabc").find_last_of("bc"), "");
1164static_assert(5 == string_view("abcabc").find_last_of("cbd"), "");
1165
1166static_assert(string_view::npos == string_view("").find_last_of("", 1), "");
1167static_assert(string_view::npos == string_view("").find_last_of("a", 0), "");
1168static_assert(
1169 string_view::npos == string_view("").find_last_of("abc", 100),
1170 "");
1171static_assert(string_view::npos == string_view("abc").find_last_of("", 1), "");
1172static_assert(string_view::npos == string_view("abc").find_last_of("d", 3), "");
1173static_assert(
1174 string_view::npos == string_view("abc").find_last_of("def", 2),
1175 "");
1176
1177static_assert(0 == string_view("abcabc").find_last_of("a", 2), "");
1178static_assert(1 == string_view("abcabc").find_last_of("b", 3), "");
1179static_assert(2 == string_view("abcabc").find_last_of("c", 2), "");
1180static_assert(2 == string_view("abcabc").find_last_of("bc", 3), "");
1181static_assert(2 == string_view("abcabc").find_last_of("cbd", 2), "");
1182} // namespace test_find_last_of_overload4
1183
1184namespace test_find_first_not_of_overload1 {
1185static_assert(
1186 string_view::npos == string_view("").find_first_not_of(string_view("")),
1187 "");
1188static_assert(
1189 string_view::npos == string_view("").find_first_not_of(string_view("a")),
1190 "");
1191static_assert(
1192 string_view::npos == string_view("").find_first_not_of(string_view("abc")),
1193 "");
1194static_assert(
1195 string_view::npos ==
1196 string_view("abc").find_first_not_of(string_view("abc")),
1197 "");
1198static_assert(
1199 string_view::npos ==
1200 string_view("abc").find_first_not_of(string_view("acdb")),
1201 "");
1202static_assert(
1203 string_view::npos ==
1204 string_view("abc").find_first_not_of(string_view("defabc")),
1205 "");
1206
1207static_assert(
1208 0 == string_view("abcabc").find_first_not_of(string_view("")),
1209 "");
1210static_assert(
1211 0 == string_view("abcabc").find_first_not_of(string_view("bc")),
1212 "");
1213static_assert(
1214 1 == string_view("abcabc").find_first_not_of(string_view("ac")),
1215 "");
1216static_assert(
1217 2 == string_view("abcabc").find_first_not_of(string_view("ab")),
1218 "");
1219static_assert(
1220 1 == string_view("abcabc").find_first_not_of(string_view("a")),
1221 "");
1222static_assert(
1223 1 == string_view("abcabc").find_first_not_of(string_view("da")),
1224 "");
1225
1226static_assert(
1227 string_view::npos == string_view("").find_first_not_of(string_view(""), 1),
1228 "");
1229static_assert(
1230 string_view::npos == string_view("").find_first_not_of(string_view("a"), 1),
1231 "");
1232static_assert(
1233 string_view::npos ==
1234 string_view("").find_first_not_of(string_view("abc"), 100),
1235 "");
1236static_assert(
1237 string_view::npos ==
1238 string_view("abc").find_first_not_of(string_view("abc"), 1),
1239 "");
1240static_assert(
1241 string_view::npos ==
1242 string_view("abc").find_first_not_of(string_view("acdb"), 3),
1243 "");
1244static_assert(
1245 string_view::npos ==
1246 string_view("abc").find_first_not_of(string_view("defabc"), 2),
1247 "");
1248
1249static_assert(
1250 1 == string_view("abcabc").find_first_not_of(string_view(""), 1),
1251 "");
1252static_assert(
1253 3 == string_view("abcabc").find_first_not_of(string_view("bc"), 1),
1254 "");
1255static_assert(
1256 4 == string_view("abcabc").find_first_not_of(string_view("ac"), 4),
1257 "");
1258static_assert(
1259 5 == string_view("abcabc").find_first_not_of(string_view("ab"), 5),
1260 "");
1261static_assert(
1262 4 == string_view("abcabc").find_first_not_of(string_view("a"), 3),
1263 "");
1264static_assert(
1265 4 == string_view("abcabc").find_first_not_of(string_view("da"), 4),
1266 "");
1267} // namespace test_find_first_not_of_overload1
1268
1269namespace test_find_first_not_of_overload2 {
1270static_assert(string_view::npos == string_view("").find_first_not_of('a'), "");
1271static_assert(string_view::npos == string_view("a").find_first_not_of('a'), "");
1272static_assert(1 == string_view("abc").find_first_not_of('a'), "");
1273static_assert(
1274 string_view::npos == string_view("a").find_first_not_of('a', 1),
1275 "");
1276static_assert(0 == string_view("abc").find_first_not_of('b'), "");
1277static_assert(2 == string_view("abc").find_first_not_of('b', 1), "");
1278static_assert(2 == string_view("abc").find_first_not_of('b', 2), "");
1279static_assert(
1280 string_view::npos == string_view("abc").find_first_not_of('b', 3),
1281 "");
1282static_assert(0 == string_view("abc").find_first_not_of('c'), "");
1283static_assert(1 == string_view("abc").find_first_not_of('c', 1), "");
1284static_assert(
1285 string_view::npos == string_view("abc").find_first_not_of('c', 2),
1286 "");
1287static_assert(
1288 string_view::npos == string_view("abc").find_first_not_of('c', 3),
1289 "");
1290static_assert(
1291 string_view::npos == string_view("abc").find_first_not_of('a', 100),
1292 "");
1293static_assert(1 == string_view("ababa").find_first_not_of('a'), "");
1294static_assert(1 == string_view("ababa").find_first_not_of('a', 0), "");
1295static_assert(1 == string_view("ababa").find_first_not_of('a', 1), "");
1296static_assert(3 == string_view("ababa").find_first_not_of('a', 2), "");
1297static_assert(3 == string_view("ababa").find_first_not_of('a', 3), "");
1298static_assert(
1299 string_view::npos == string_view("ababa").find_first_not_of('a', 4),
1300 "");
1301static_assert(
1302 string_view::npos == string_view("ababa").find_first_not_of('a', 5),
1303 "");
1304} // namespace test_find_first_not_of_overload2
1305
1306namespace test_find_first_not_of_overload3 {
1307static_assert(
1308 string_view::npos == string_view("").find_first_not_of("ab", 0, 0),
1309 "");
1310static_assert(
1311 string_view::npos == string_view("").find_first_not_of("abc", 0, 1),
1312 "");
1313static_assert(
1314 string_view::npos == string_view("").find_first_not_of("abcdef", 0, 3),
1315 "");
1316static_assert(
1317 string_view::npos == string_view("abc").find_first_not_of("abcdef", 0, 3),
1318 "");
1319static_assert(
1320 string_view::npos == string_view("abc").find_first_not_of("acdbef", 0, 4),
1321 "");
1322static_assert(
1323 string_view::npos == string_view("abc").find_first_not_of("defabcas", 0, 6),
1324 "");
1325
1326static_assert(0 == string_view("abcabc").find_first_not_of("abc", 0, 0), "");
1327static_assert(0 == string_view("abcabc").find_first_not_of("bca", 0, 2), "");
1328static_assert(1 == string_view("abcabc").find_first_not_of("acb", 0, 2), "");
1329static_assert(2 == string_view("abcabc").find_first_not_of("abc", 0, 2), "");
1330static_assert(1 == string_view("abcabc").find_first_not_of("abac", 0, 1), "");
1331static_assert(1 == string_view("abcabc").find_first_not_of("dadab", 0, 2), "");
1332
1333static_assert(
1334 string_view::npos == string_view("").find_first_not_of("ab", 1, 0),
1335 "");
1336static_assert(
1337 string_view::npos == string_view("").find_first_not_of("abc", 1, 1),
1338 "");
1339static_assert(
1340 string_view::npos == string_view("").find_first_not_of("abcdef", 100, 3),
1341 "");
1342static_assert(
1343 string_view::npos == string_view("abc").find_first_not_of("abcdef", 1, 3),
1344 "");
1345static_assert(
1346 string_view::npos == string_view("abc").find_first_not_of("acdbef", 3, 4),
1347 "");
1348static_assert(
1349 string_view::npos == string_view("abc").find_first_not_of("defabcas", 2, 6),
1350 "");
1351
1352static_assert(1 == string_view("abcabc").find_first_not_of("bca", 1, 0), "");
1353static_assert(3 == string_view("abcabc").find_first_not_of("bca", 1, 2), "");
1354static_assert(4 == string_view("abcabc").find_first_not_of("acb", 4, 2), "");
1355static_assert(5 == string_view("abcabc").find_first_not_of("abc", 5, 2), "");
1356static_assert(4 == string_view("abcabc").find_first_not_of("abac", 3, 1), "");
1357static_assert(4 == string_view("abcabc").find_first_not_of("dadab", 4, 2), "");
1358} // namespace test_find_first_not_of_overload3
1359
1360namespace test_find_first_not_of_overload4 {
1361static_assert(string_view::npos == string_view("").find_first_not_of(""), "");
1362static_assert(string_view::npos == string_view("").find_first_not_of("a"), "");
1363static_assert(
1364 string_view::npos == string_view("").find_first_not_of("abc"),
1365 "");
1366static_assert(
1367 string_view::npos == string_view("abc").find_first_not_of("abc"),
1368 "");
1369static_assert(
1370 string_view::npos == string_view("abc").find_first_not_of("acdb"),
1371 "");
1372static_assert(
1373 string_view::npos == string_view("abc").find_first_not_of("defabc"),
1374 "");
1375
1376static_assert(0 == string_view("abcabc").find_first_not_of(""), "");
1377static_assert(0 == string_view("abcabc").find_first_not_of("bc"), "");
1378static_assert(1 == string_view("abcabc").find_first_not_of("ac"), "");
1379static_assert(2 == string_view("abcabc").find_first_not_of("ab"), "");
1380static_assert(1 == string_view("abcabc").find_first_not_of("a"), "");
1381static_assert(1 == string_view("abcabc").find_first_not_of("da"), "");
1382
1383static_assert(
1384 string_view::npos == string_view("").find_first_not_of("", 1),
1385 "");
1386static_assert(
1387 string_view::npos == string_view("").find_first_not_of("a", 1),
1388 "");
1389static_assert(
1390 string_view::npos == string_view("").find_first_not_of("abc", 100),
1391 "");
1392static_assert(
1393 string_view::npos == string_view("abc").find_first_not_of("abc", 1),
1394 "");
1395static_assert(
1396 string_view::npos == string_view("abc").find_first_not_of("acdb", 3),
1397 "");
1398static_assert(
1399 string_view::npos == string_view("abc").find_first_not_of("defabc", 2),
1400 "");
1401
1402static_assert(1 == string_view("abcabc").find_first_not_of("", 1), "");
1403static_assert(3 == string_view("abcabc").find_first_not_of("bc", 1), "");
1404static_assert(4 == string_view("abcabc").find_first_not_of("ac", 4), "");
1405static_assert(5 == string_view("abcabc").find_first_not_of("ab", 5), "");
1406static_assert(4 == string_view("abcabc").find_first_not_of("a", 3), "");
1407static_assert(4 == string_view("abcabc").find_first_not_of("da", 4), "");
1408} // namespace test_find_first_not_of_overload4
1409
1410namespace test_find_last_not_of_overload1 {
1411static_assert(
1412 string_view::npos == string_view("").find_last_not_of(string_view("")),
1413 "");
1414static_assert(
1415 string_view::npos == string_view("").find_last_not_of(string_view("a")),
1416 "");
1417static_assert(
1418 string_view::npos == string_view("").find_last_not_of(string_view("abc")),
1419 "");
1420static_assert(
1421 string_view::npos ==
1422 string_view("abc").find_last_not_of(string_view("abc")),
1423 "");
1424static_assert(
1425 string_view::npos ==
1426 string_view("abc").find_last_not_of(string_view("acdb")),
1427 "");
1428static_assert(
1429 string_view::npos ==
1430 string_view("abc").find_last_not_of(string_view("defabc")),
1431 "");
1432
1433static_assert(5 == string_view("abcabc").find_last_not_of(string_view("")), "");
1434static_assert(
1435 3 == string_view("abcabc").find_last_not_of(string_view("bc")),
1436 "");
1437static_assert(
1438 4 == string_view("abcabc").find_last_not_of(string_view("ac")),
1439 "");
1440static_assert(
1441 5 == string_view("abcabc").find_last_not_of(string_view("ab")),
1442 "");
1443static_assert(
1444 4 == string_view("abcabc").find_last_not_of(string_view("c")),
1445 "");
1446static_assert(
1447 4 == string_view("abcabc").find_last_not_of(string_view("ca")),
1448 "");
1449
1450static_assert(
1451 string_view::npos == string_view("").find_last_not_of(string_view(""), 1),
1452 "");
1453static_assert(
1454 string_view::npos == string_view("").find_last_not_of(string_view("a"), 0),
1455 "");
1456static_assert(
1457 string_view::npos ==
1458 string_view("").find_last_not_of(string_view("abc"), 100),
1459 "");
1460static_assert(
1461 string_view::npos ==
1462 string_view("abc").find_last_not_of(string_view("abc"), 1),
1463 "");
1464static_assert(
1465 string_view::npos ==
1466 string_view("abc").find_last_not_of(string_view("acdb"), 3),
1467 "");
1468static_assert(
1469 string_view::npos ==
1470 string_view("abc").find_last_not_of(string_view("defabc"), 2),
1471 "");
1472
1473static_assert(
1474 4 == string_view("abcabc").find_last_not_of(string_view(""), 4),
1475 "");
1476static_assert(
1477 0 == string_view("abcabc").find_last_not_of(string_view("bc"), 2),
1478 "");
1479static_assert(
1480 1 == string_view("abcabc").find_last_not_of(string_view("ac"), 2),
1481 "");
1482static_assert(
1483 2 == string_view("abcabc").find_last_not_of(string_view("ab"), 2),
1484 "");
1485static_assert(
1486 4 == string_view("abcabc").find_last_not_of(string_view("c"), 4),
1487 "");
1488static_assert(
1489 1 == string_view("abcabc").find_last_not_of(string_view("ca"), 2),
1490 "");
1491} // namespace test_find_last_not_of_overload1
1492
1493namespace test_find_last_not_of_overload2 {
1494static_assert(string_view::npos == string_view("").find_last_not_of('a'), "");
1495static_assert(string_view::npos == string_view("a").find_last_not_of('a'), "");
1496static_assert(2 == string_view("abc").find_last_not_of('a'), "");
1497static_assert(1 == string_view("abc").find_last_not_of('c'), "");
1498static_assert(
1499 string_view::npos == string_view("a").find_last_not_of('a', 0),
1500 "");
1501static_assert(2 == string_view("abc").find_last_not_of('b'), "");
1502static_assert(
1503 string_view::npos == string_view("abc").find_last_not_of('a', 0),
1504 "");
1505static_assert(0 == string_view("abc").find_last_not_of('b', 1), "");
1506static_assert(0 == string_view("abc").find_last_not_of('c', 0), "");
1507static_assert(1 == string_view("abc").find_last_not_of('c', 1), "");
1508static_assert(1 == string_view("abc").find_last_not_of('c', 2), "");
1509static_assert(1 == string_view("abc").find_last_not_of('c', 3), "");
1510static_assert(2 == string_view("abc").find_last_not_of('a', 100), "");
1511static_assert(3 == string_view("ababa").find_last_not_of('a'), "");
1512static_assert(
1513 string_view::npos == string_view("ababa").find_last_not_of('a', 0),
1514 "");
1515static_assert(1 == string_view("ababa").find_last_not_of('a', 1), "");
1516static_assert(1 == string_view("ababa").find_last_not_of('a', 2), "");
1517static_assert(3 == string_view("ababa").find_last_not_of('a', 3), "");
1518static_assert(3 == string_view("ababa").find_last_not_of('a', 4), "");
1519static_assert(3 == string_view("ababa").find_last_not_of('a', 5), "");
1520} // namespace test_find_last_not_of_overload2
1521
1522namespace test_find_last_not_of_overload3 {
1523static_assert(
1524 string_view::npos ==
1525 string_view("").find_last_not_of("ab", string_view::npos, 0),
1526 "");
1527static_assert(
1528 string_view::npos ==
1529 string_view("").find_last_not_of("abc", string_view::npos, 1),
1530 "");
1531static_assert(
1532 string_view::npos ==
1533 string_view("").find_last_not_of("abcdef", string_view::npos, 3),
1534 "");
1535static_assert(
1536 string_view::npos ==
1537 string_view("abc").find_last_not_of("abcdef", string_view::npos, 3),
1538 "");
1539static_assert(
1540 string_view::npos ==
1541 string_view("abc").find_last_not_of("acdbef", string_view::npos, 4),
1542 "");
1543static_assert(
1544 string_view::npos ==
1545 string_view("abc").find_last_not_of("defabcas", string_view::npos, 6),
1546 "");
1547
1548static_assert(
1549 5 == string_view("abcabc").find_last_not_of("cab", string_view::npos, 0),
1550 "");
1551static_assert(
1552 3 == string_view("abcabc").find_last_not_of("bca", string_view::npos, 2),
1553 "");
1554static_assert(
1555 4 == string_view("abcabc").find_last_not_of("acb", string_view::npos, 2),
1556 "");
1557static_assert(
1558 5 == string_view("abcabc").find_last_not_of("abc", string_view::npos, 2),
1559 "");
1560static_assert(
1561 4 == string_view("abcabc").find_last_not_of("caba", string_view::npos, 1),
1562 "");
1563static_assert(
1564 4 == string_view("abcabc").find_last_not_of("cacab", string_view::npos, 2),
1565 "");
1566
1567static_assert(
1568 string_view::npos == string_view("").find_last_not_of("ab", 1, 0),
1569 "");
1570static_assert(
1571 string_view::npos == string_view("").find_last_not_of("abc", 0, 1),
1572 "");
1573static_assert(
1574 string_view::npos == string_view("").find_last_not_of("abcdef", 100, 3),
1575 "");
1576static_assert(
1577 string_view::npos == string_view("abc").find_last_not_of("abcdef", 1, 3),
1578 "");
1579static_assert(
1580 string_view::npos == string_view("abc").find_last_not_of("acdbef", 3, 4),
1581 "");
1582static_assert(
1583 string_view::npos == string_view("abc").find_last_not_of("defabcas", 2, 6),
1584 "");
1585
1586static_assert(4 == string_view("abcabc").find_last_not_of("bca", 4, 0), "");
1587static_assert(0 == string_view("abcabc").find_last_not_of("bca", 2, 2), "");
1588static_assert(1 == string_view("abcabc").find_last_not_of("acb", 2, 2), "");
1589static_assert(2 == string_view("abcabc").find_last_not_of("abc", 2, 2), "");
1590static_assert(4 == string_view("abcabc").find_last_not_of("caba", 4, 1), "");
1591static_assert(1 == string_view("abcabc").find_last_not_of("cacab", 2, 2), "");
1592} // namespace test_find_last_not_of_overload3
1593
1594namespace test_find_last_not_of_overload4 {
1595static_assert(string_view::npos == string_view("").find_last_not_of(""), "");
1596static_assert(string_view::npos == string_view("").find_last_not_of("a"), "");
1597static_assert(string_view::npos == string_view("").find_last_not_of("abc"), "");
1598static_assert(
1599 string_view::npos == string_view("abc").find_last_not_of("abc"),
1600 "");
1601static_assert(
1602 string_view::npos == string_view("abc").find_last_not_of("acdb"),
1603 "");
1604static_assert(
1605 string_view::npos == string_view("abc").find_last_not_of("defabc"),
1606 "");
1607
1608static_assert(5 == string_view("abcabc").find_last_not_of(""), "");
1609static_assert(3 == string_view("abcabc").find_last_not_of("bc"), "");
1610static_assert(4 == string_view("abcabc").find_last_not_of("ac"), "");
1611static_assert(5 == string_view("abcabc").find_last_not_of("ab"), "");
1612static_assert(4 == string_view("abcabc").find_last_not_of("c"), "");
1613static_assert(4 == string_view("abcabc").find_last_not_of("ca"), "");
1614
1615static_assert(string_view::npos == string_view("").find_last_not_of("", 1), "");
1616static_assert(
1617 string_view::npos == string_view("").find_last_not_of("a", 0),
1618 "");
1619static_assert(
1620 string_view::npos == string_view("").find_last_not_of("abc", 100),
1621 "");
1622static_assert(
1623 string_view::npos == string_view("abc").find_last_not_of("abc", 1),
1624 "");
1625static_assert(
1626 string_view::npos == string_view("abc").find_last_not_of("acdb", 3),
1627 "");
1628static_assert(
1629 string_view::npos == string_view("abc").find_last_not_of("defabc", 2),
1630 "");
1631
1632static_assert(4 == string_view("abcabc").find_last_not_of("", 4), "");
1633static_assert(0 == string_view("abcabc").find_last_not_of("bc", 2), "");
1634static_assert(1 == string_view("abcabc").find_last_not_of("ac", 2), "");
1635static_assert(2 == string_view("abcabc").find_last_not_of("ab", 2), "");
1636static_assert(4 == string_view("abcabc").find_last_not_of("c", 4), "");
1637static_assert(1 == string_view("abcabc").find_last_not_of("ca", 2), "");
1638} // namespace test_find_last_not_of_overload4
1639
1640namespace test_output_operator {
1641void testOutputIterator(const std::string& str) {
1642 std::ostringstream stream;
1643 stream << string_view(str);
1644 std::string actual = stream.str();
1645 EXPECT_EQ(str, actual);
1646}
1647
1648TEST(StringViewTest, testOutputOperator) {
1649 testOutputIterator("");
1650 testOutputIterator("abc");
1651}
1652} // namespace test_output_operator
1653
1654namespace test_hash {
1655TEST(StringViewTest, testHash) {
1656 EXPECT_EQ(
1657 std::hash<string_view>()(string_view()), std::hash<string_view>()(""));
1658 EXPECT_EQ(
1659 std::hash<string_view>()(string_view("hello")),
1660 std::hash<string_view>()("hello"));
1661 EXPECT_NE(
1662 std::hash<string_view>()(string_view("hello")),
1663 std::hash<string_view>()(""));
1664}
1665} // namespace test_hash
1666
1667} // namespace
1668