1/* 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()); 38 REPORTER_ASSERT(r, !empty.starts_with('x')); 39 REPORTER_ASSERT(r, !empty.ends_with('x')); 40 REPORTER_ASSERT(r, !empty.starts_with("x")); 41 REPORTER_ASSERT(r, !empty.ends_with("x")); 42 REPORTER_ASSERT(r, empty.starts_with("")); 43 REPORTER_ASSERT(r, empty.ends_with("")); 44 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 51 REPORTER_ASSERT(r, xyz.starts_with('x')); 52 REPORTER_ASSERT(r, !xyz.starts_with('y')); 53 REPORTER_ASSERT(r, xyz.ends_with('z')); 54 REPORTER_ASSERT(r, !xyz.ends_with('y')); 55 56 REPORTER_ASSERT(r, xyz.starts_with("")); 57 REPORTER_ASSERT(r, xyz.ends_with("")); 58 REPORTER_ASSERT(r, xyz.starts_with("x")); 59 REPORTER_ASSERT(r, xyz.ends_with("z")); 60 REPORTER_ASSERT(r, !xyz.starts_with("xa")); 61 REPORTER_ASSERT(r, !xyz.ends_with("az")); 62 REPORTER_ASSERT(r, xyz.starts_with("xy")); 63 REPORTER_ASSERT(r, xyz.ends_with("yz")); 64 REPORTER_ASSERT(r, xyz.starts_with("xyz")); 65 REPORTER_ASSERT(r, xyz.ends_with("xyz")); 66 REPORTER_ASSERT(r, !xyz.starts_with("wxyz")); 67 REPORTER_ASSERT(r, !xyz.ends_with("wxyz")); 68 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} 133 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()); 157 REPORTER_ASSERT(r, xyz.substr(4).empty()); 158} 159 160DEF_TEST(SkStringViewFind, r) { 161 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("abcdef") == 0); 162 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("abcdefg") == skstd::string_view::npos); 163 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("") == 0); 164 REPORTER_ASSERT(r, skstd::string_view("").find("") == 0); 165 REPORTER_ASSERT(r, skstd::string_view("").find("a") == skstd::string_view::npos); 166 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("b") == 1); 167 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("f") == 5); 168 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("q") == skstd::string_view::npos); 169 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("bcd") == 1); 170 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("bcd", 2) == skstd::string_view::npos); 171 REPORTER_ASSERT(r, skstd::string_view("abcdef").find("bce") == skstd::string_view::npos); 172 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test") == 3); 173 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test", 1) == 3); 174 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test", 3) == 3); 175 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test", 4) == 10); 176 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test2") == 10); 177 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").find("test3") == 17); 178 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").contains("test")); 179 REPORTER_ASSERT(r, skstd::string_view("ttttest1tttest2tttest3").contains("test3")); 180 REPORTER_ASSERT(r, !skstd::string_view("ttttest1tttest2tttest3").contains("test4")); 181 REPORTER_ASSERT(r, skstd::string_view("").contains("")); 182 REPORTER_ASSERT(r, !skstd::string_view("").contains("a")); 183 REPORTER_ASSERT(r, skstd::string_view("abcabcd").contains("abcd")); 184 REPORTER_ASSERT(r, skstd::string_view("abc").contains("")); 185 REPORTER_ASSERT(r, skstd::string_view("abc").contains("a")); 186 REPORTER_ASSERT(r, skstd::string_view("abc").contains("b")); 187 REPORTER_ASSERT(r, skstd::string_view("abc").contains("c")); 188 REPORTER_ASSERT(r, skstd::string_view("abc").contains("ab")); 189 REPORTER_ASSERT(r, skstd::string_view("abc").contains("bc")); 190 REPORTER_ASSERT(r, !skstd::string_view("abc").contains("ac")); 191 REPORTER_ASSERT(r, !skstd::string_view("abc").contains("cb")); 192 REPORTER_ASSERT(r, !skstd::string_view("abc").contains("abcd")); 193} 194