test/zserio/StringViewTest.cpp
Line | Count | Source |
1 | | #include <array> |
2 | | #include <string> |
3 | | |
4 | | #include "gtest/gtest.h" |
5 | | #include "zserio/StringView.h" |
6 | | |
7 | | namespace zserio |
8 | | { |
9 | | |
10 | | TEST(StringViewTest, ptrConstructor) |
11 | 1 | { |
12 | 1 | const char* str = "everything"; |
13 | 1 | StringView view(str); |
14 | 1 | ASSERT_EQ(str, view.data()); |
15 | 1 | ASSERT_EQ(10, view.size()); |
16 | 1 | } |
17 | | |
18 | | TEST(StringViewTest, ptrCountConstructor) |
19 | 1 | { |
20 | 1 | const char* str = "everything"; |
21 | 1 | StringView view(str, 9); |
22 | 1 | ASSERT_EQ(str, view.data()); |
23 | 1 | ASSERT_EQ(9, view.size()); |
24 | 1 | } |
25 | | |
26 | | TEST(StringViewTest, stringConstructor) |
27 | 1 | { |
28 | 1 | std::string str = "everything"; |
29 | 1 | StringView view(str); |
30 | 1 | ASSERT_EQ(str.data(), view.data()); |
31 | 1 | ASSERT_EQ(str.size(), view.size()); |
32 | 1 | } |
33 | | |
34 | | TEST(StringViewTest, beginEnd) |
35 | 1 | { |
36 | 1 | std::string str = "everything"; |
37 | 1 | StringView view(str); |
38 | | |
39 | 1 | auto itStr = str.begin(); |
40 | 11 | for (auto it = view.begin(); it != view.end(); ++it, ++itStr10 ) |
41 | 10 | { |
42 | 10 | ASSERT_NE(str.end(), itStr); |
43 | 10 | ASSERT_EQ(*itStr, *it); |
44 | 10 | } |
45 | | |
46 | 1 | itStr = str.begin(); |
47 | 11 | for (auto it = view.cbegin(); it != view.cend(); ++it, ++itStr10 ) |
48 | 10 | { |
49 | 10 | ASSERT_NE(str.end(), itStr); |
50 | 10 | ASSERT_EQ(*itStr, *it); |
51 | 10 | } |
52 | 1 | } |
53 | | |
54 | | TEST(StringViewTest, rBeginRend) |
55 | 1 | { |
56 | 1 | std::string str = "everything"; |
57 | 1 | StringView view(str); |
58 | | |
59 | 1 | auto itStr = str.rbegin(); |
60 | 11 | for (auto it = view.rbegin(); it != view.rend(); ++it, ++itStr10 ) |
61 | 10 | { |
62 | 10 | ASSERT_NE(str.rend(), itStr); |
63 | 10 | ASSERT_EQ(*itStr, *it); |
64 | 10 | } |
65 | | |
66 | 1 | itStr = str.rbegin(); |
67 | 11 | for (auto it = view.crbegin(); it != view.crend(); ++it, ++itStr10 ) |
68 | 10 | { |
69 | 10 | ASSERT_NE(str.rend(), itStr); |
70 | 10 | ASSERT_EQ(*itStr, *it); |
71 | 10 | } |
72 | 1 | } |
73 | | |
74 | | TEST(StringViewTest, arrayAccess) |
75 | 1 | { |
76 | 1 | const char* str = "everything"; |
77 | 1 | StringView view(str); |
78 | | |
79 | 11 | for (size_t i = 0; i < view.size(); ++i10 ) |
80 | 10 | { |
81 | 10 | ASSERT_EQ(str[i], view[i]); |
82 | 10 | } |
83 | 1 | } |
84 | | |
85 | | TEST(StringViewTest, at) |
86 | 1 | { |
87 | 1 | const char* str = "everything"; |
88 | 1 | StringView view(str); |
89 | | |
90 | 11 | for (size_t i = 0; i < view.size(); ++i10 ) |
91 | 10 | { |
92 | 10 | ASSERT_EQ(str[i], view.at(i)); |
93 | 10 | } |
94 | | |
95 | 1 | ASSERT_THROW(view.at(11), CppRuntimeException); |
96 | 1 | } |
97 | | |
98 | | TEST(StringViewTest, front) |
99 | 1 | { |
100 | 1 | const char* str = "nothing"; |
101 | 1 | StringView view(str); |
102 | 1 | ASSERT_EQ('n', view.front()); |
103 | 1 | } |
104 | | |
105 | | TEST(StringViewTest, back) |
106 | 1 | { |
107 | 1 | const char* str = "beam"; |
108 | 1 | StringView view(str); |
109 | 1 | ASSERT_EQ('m', view.back()); |
110 | 1 | } |
111 | | |
112 | | TEST(StringViewTest, data) |
113 | 1 | { |
114 | 1 | const char* str = "Everything"; |
115 | 1 | StringView view(str); |
116 | 1 | ASSERT_EQ(str, view.data()); |
117 | 1 | } |
118 | | |
119 | | TEST(StringViewTest, size) |
120 | 1 | { |
121 | 1 | const char* str = "Everything"; |
122 | 1 | StringView view(str); |
123 | 1 | ASSERT_EQ(10, view.size()); |
124 | 1 | } |
125 | | |
126 | | TEST(StringViewTest, length) |
127 | 1 | { |
128 | 1 | const char* str = "Everything"; |
129 | 1 | StringView view(str); |
130 | 1 | ASSERT_EQ(10, view.length()); |
131 | 1 | } |
132 | | |
133 | | TEST(StringViewTest, maxSize) |
134 | 1 | { |
135 | 1 | const char* str = "Everything"; |
136 | 1 | StringView view(str); |
137 | 1 | ASSERT_LE(1U << 16U, view.max_size()); |
138 | 1 | } |
139 | | |
140 | | TEST(StringViewTest, empty) |
141 | 1 | { |
142 | 1 | const char* str = "Everything"; |
143 | 1 | StringView view(str); |
144 | 1 | StringView svEmpty; |
145 | 1 | ASSERT_FALSE(view.empty()); |
146 | 1 | ASSERT_TRUE(svEmpty.empty()); |
147 | 1 | } |
148 | | |
149 | | TEST(StringViewTest, removePrefix) |
150 | 1 | { |
151 | 1 | const char* str = "Everything"; |
152 | 1 | StringView view(str); |
153 | | |
154 | 1 | view.remove_prefix(2); |
155 | 1 | ASSERT_EQ(8, view.size()); |
156 | 1 | ASSERT_EQ(str + 2, view.data()); |
157 | | |
158 | 1 | view.remove_prefix(8); |
159 | 1 | ASSERT_TRUE(view.empty()); |
160 | 1 | } |
161 | | |
162 | | TEST(StringViewTest, removeSuffix) |
163 | 1 | { |
164 | 1 | const char* str = "Everything"; |
165 | 1 | StringView view(str); |
166 | | |
167 | 1 | view.remove_suffix(2); |
168 | 1 | ASSERT_EQ(8, view.size()); |
169 | 1 | ASSERT_EQ(str, view.data()); |
170 | | |
171 | 1 | view.remove_suffix(8); |
172 | 1 | ASSERT_TRUE(view.empty()); |
173 | 1 | } |
174 | | |
175 | | TEST(StringViewTest, swap) |
176 | 1 | { |
177 | 1 | const char* str1 = "everything"; |
178 | 1 | const char* str2 = "another string"; |
179 | 1 | StringView sv1(str1); |
180 | 1 | StringView sv2(str2); |
181 | 1 | sv1.swap(sv2); |
182 | 1 | ASSERT_EQ(14, sv1.size()); |
183 | 1 | ASSERT_EQ(10, sv2.size()); |
184 | 1 | ASSERT_EQ(str2, sv1.data()); |
185 | 1 | ASSERT_EQ(str1, sv2.data()); |
186 | 1 | } |
187 | | |
188 | | TEST(StringViewTest, copy) |
189 | 1 | { |
190 | 1 | const char* str = "everything"; |
191 | 1 | StringView view(str); |
192 | 1 | std::array<char, 6> buffer = {0x55, 0x55, 0x55, 0x55, 0x55, 0x55}; |
193 | 1 | view.copy(buffer.data(), buffer.size() - 1, 1); |
194 | 1 | ASSERT_EQ('v', buffer[0]); |
195 | 1 | ASSERT_EQ('e', buffer[1]); |
196 | 1 | ASSERT_EQ('r', buffer[2]); |
197 | 1 | ASSERT_EQ('y', buffer[3]); |
198 | 1 | ASSERT_EQ('t', buffer[4]); |
199 | 1 | ASSERT_EQ(0x55, buffer[5]); |
200 | 1 | ASSERT_THROW(view.copy(buffer.data(), buffer.size() - 1, 11), CppRuntimeException); |
201 | 1 | } |
202 | | |
203 | | TEST(StringViewTest, substr) |
204 | 1 | { |
205 | 1 | const char* str = "everything"; |
206 | 1 | StringView view(str); |
207 | 1 | StringView subView = view.substr(2, 5); |
208 | 1 | ASSERT_EQ(5, subView.size()); |
209 | 1 | ASSERT_EQ(str + 2, subView.data()); |
210 | | |
211 | 1 | ASSERT_THROW(view.substr(11), CppRuntimeException); |
212 | 1 | } |
213 | | |
214 | | TEST(StringViewTest, compareStringView) |
215 | 1 | { |
216 | 1 | StringView aaaView("aaa"); |
217 | 1 | StringView bbbView("bbb"); |
218 | 1 | StringView aaaaView("aaaa"); |
219 | 1 | StringView aaView("aa"); |
220 | | |
221 | 1 | ASSERT_LT(0, bbbView.compare(aaaView)); |
222 | 1 | ASSERT_GT(0, aaaView.compare(bbbView)); |
223 | 1 | ASSERT_EQ(0, aaaView.compare(aaaView)); |
224 | 1 | ASSERT_LT(0, aaaView.compare(aaView)); |
225 | 1 | ASSERT_GT(0, aaaView.compare(aaaaView)); |
226 | 1 | } |
227 | | |
228 | | TEST(StringViewTest, compareStringViewSub) |
229 | 1 | { |
230 | 1 | StringView aaaView("aaa"); |
231 | 1 | StringView saaasView("saaas"); |
232 | 1 | StringView bbbView("bbb"); |
233 | 1 | StringView sbbbsView("sbbbs"); |
234 | 1 | StringView aaaaView("aaaa"); |
235 | 1 | StringView aaView("aa"); |
236 | | |
237 | 1 | ASSERT_LT(0, sbbbsView.compare(1, 3, aaaView)); |
238 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, bbbView)); |
239 | 1 | ASSERT_EQ(0, saaasView.compare(1, 3, aaaView)); |
240 | 1 | ASSERT_LT(0, saaasView.compare(1, 3, aaView)); |
241 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, aaaaView)); |
242 | 1 | } |
243 | | |
244 | | TEST(StringViewTest, compareStringViewSubSub) |
245 | 1 | { |
246 | 1 | StringView aaaView("aaa"); |
247 | 1 | StringView saaasView("saaas"); |
248 | 1 | StringView bbbView("bbb"); |
249 | 1 | StringView sbbbsView("sbbbs"); |
250 | 1 | StringView saaaasView("saaaas"); |
251 | | |
252 | 1 | ASSERT_LT(0, sbbbsView.compare(1, 3, saaasView, 1, 3)); |
253 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, sbbbsView, 1, 3)); |
254 | 1 | ASSERT_EQ(0, saaasView.compare(1, 3, saaasView, 1, 3)); |
255 | 1 | ASSERT_LT(0, saaasView.compare(1, 3, saaasView, 1, 2)); |
256 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, saaaasView, 1, 4)); |
257 | 1 | } |
258 | | |
259 | | TEST(StringViewTest, compareChar) |
260 | 1 | { |
261 | 1 | StringView aaaView("aaa"); |
262 | 1 | StringView bbbView("bbb"); |
263 | | |
264 | 1 | ASSERT_LT(0, bbbView.compare("aaa")); |
265 | 1 | ASSERT_GT(0, aaaView.compare("bbb")); |
266 | 1 | ASSERT_EQ(0, aaaView.compare("aaa")); |
267 | 1 | ASSERT_LT(0, aaaView.compare("aa")); |
268 | 1 | ASSERT_GT(0, aaaView.compare("aaaa")); |
269 | 1 | } |
270 | | |
271 | | TEST(StringViewTest, compareCharSub) |
272 | 1 | { |
273 | 1 | StringView saaasView("saaas"); |
274 | 1 | StringView sbbbsView("sbbbs"); |
275 | | |
276 | 1 | ASSERT_LT(0, sbbbsView.compare(1, 3, "aaa")); |
277 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, "bbb")); |
278 | 1 | ASSERT_EQ(0, saaasView.compare(1, 3, "aaa")); |
279 | 1 | ASSERT_LT(0, saaasView.compare(1, 3, "aa")); |
280 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, "aaaa")); |
281 | 1 | } |
282 | | |
283 | | TEST(StringViewTest, compareCharSubSub) |
284 | 1 | { |
285 | 1 | StringView saaasView("saaas"); |
286 | 1 | StringView sbbbsView("sbbbs"); |
287 | | |
288 | 1 | ASSERT_LT(0, sbbbsView.compare(1, 3, "aaas", 3)); |
289 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, "bbbs", 3)); |
290 | 1 | ASSERT_EQ(0, saaasView.compare(1, 3, "aaas", 3)); |
291 | 1 | ASSERT_LT(0, saaasView.compare(1, 3, "aaas", 2)); |
292 | 1 | ASSERT_GT(0, saaasView.compare(1, 3, "aaaas", 4)); |
293 | 1 | } |
294 | | |
295 | | TEST(StringViewTest, find) |
296 | 1 | { |
297 | 1 | StringView str("karkarbanatek"); |
298 | | |
299 | 1 | StringView search1("karbanatekkarbanatek"); |
300 | 1 | ASSERT_EQ(StringView::npos, str.find(search1, 0)); |
301 | 1 | ASSERT_EQ(StringView::npos, str.find(search1, 9999)); |
302 | | |
303 | 1 | StringView search2(""); |
304 | 1 | ASSERT_EQ(0, str.find(search2, 0)); |
305 | | |
306 | 1 | StringView search3("kar"); |
307 | 1 | ASSERT_EQ(0, str.find(search3, 0)); |
308 | 1 | ASSERT_EQ(3, str.find(search3, 1)); |
309 | 1 | ASSERT_EQ(3, str.find(search3, 3)); |
310 | 1 | ASSERT_EQ(StringView::npos, str.find(search3, 4)); |
311 | | |
312 | 1 | StringView search4("ban"); |
313 | 1 | ASSERT_EQ(6, str.find(search4, 0)); |
314 | 1 | ASSERT_EQ(6, str.find(search4, 6)); |
315 | 1 | ASSERT_EQ(StringView::npos, str.find(search4, 7)); |
316 | | |
317 | 1 | StringView search5("tek"); |
318 | 1 | ASSERT_EQ(10, str.find(search5, 0)); |
319 | 1 | ASSERT_EQ(10, str.find(search5, 10)); |
320 | 1 | ASSERT_EQ(StringView::npos, str.find(search5, 11)); |
321 | | |
322 | 1 | StringView search6("tekk"); |
323 | 1 | ASSERT_EQ(StringView::npos, str.find(search6, 0)); |
324 | 1 | ASSERT_EQ(StringView::npos, str.find(search6, 10)); |
325 | 1 | ASSERT_EQ(StringView::npos, str.find(search6, 11)); |
326 | | |
327 | 1 | StringView search7("ana"); |
328 | 1 | ASSERT_EQ(7, str.find(search7, 0)); |
329 | 1 | ASSERT_EQ(7, str.find(search7, 7)); |
330 | 1 | ASSERT_EQ(StringView::npos, str.find(search7, 8)); |
331 | 1 | } |
332 | | |
333 | | TEST(StringViewTest, findChar) |
334 | 1 | { |
335 | 1 | StringView str("karkarbanatek"); |
336 | | |
337 | 1 | StringView search2(""); |
338 | 1 | ASSERT_EQ(0, str.find(search2, 0)); |
339 | | |
340 | 1 | ASSERT_EQ(0, str.find('k', 0)); |
341 | 1 | ASSERT_EQ(3, str.find('k', 1)); |
342 | 1 | ASSERT_EQ(12, str.find('k', 5)); |
343 | 1 | ASSERT_EQ(StringView::npos, str.find('m', 0)); |
344 | 1 | } |
345 | | |
346 | | TEST(StringViewTest, findCharStrLen) |
347 | 1 | { |
348 | 1 | StringView str("karkarbanatek"); |
349 | | |
350 | 1 | ASSERT_EQ(StringView::npos, str.find("karbanatekkarbanatek", 0, 21)); |
351 | 1 | ASSERT_EQ(StringView::npos, str.find("karbanatekkarbanatek", 9999, 21)); |
352 | | |
353 | 1 | ASSERT_EQ(0, str.find("", 0, 0)); |
354 | | |
355 | 1 | ASSERT_EQ(0, str.find("kar", 0, 3)); |
356 | 1 | ASSERT_EQ(3, str.find("kar", 1, 3)); |
357 | 1 | ASSERT_EQ(3, str.find("kar", 3, 3)); |
358 | 1 | ASSERT_EQ(StringView::npos, str.find("kar", 4, 3)); |
359 | | |
360 | 1 | ASSERT_EQ(6, str.find("ban", 0, 3)); |
361 | 1 | ASSERT_EQ(6, str.find("ban", 6, 3)); |
362 | 1 | ASSERT_EQ(StringView::npos, str.find("ban", 7, 3)); |
363 | | |
364 | 1 | ASSERT_EQ(10, str.find("tek", 0, 3)); |
365 | 1 | ASSERT_EQ(10, str.find("tek", 10, 3)); |
366 | 1 | ASSERT_EQ(StringView::npos, str.find("tek", 11, 3)); |
367 | | |
368 | 1 | ASSERT_EQ(StringView::npos, str.find("tekk", 0, 4)); |
369 | 1 | ASSERT_EQ(StringView::npos, str.find("tekk", 10, 4)); |
370 | 1 | ASSERT_EQ(StringView::npos, str.find("tekk", 11, 4)); |
371 | 1 | } |
372 | | |
373 | | TEST(StringViewTest, findCharStr) |
374 | 1 | { |
375 | 1 | StringView str("karkarbanatek"); |
376 | | |
377 | 1 | ASSERT_EQ(StringView::npos, str.find("karbanatekkarbanatek", 0)); |
378 | 1 | ASSERT_EQ(StringView::npos, str.find("karbanatekkarbanatek", 9999)); |
379 | | |
380 | 1 | ASSERT_EQ(0, str.find("", 0)); |
381 | | |
382 | 1 | ASSERT_EQ(0, str.find("kar", 0)); |
383 | 1 | ASSERT_EQ(3, str.find("kar", 1)); |
384 | 1 | ASSERT_EQ(3, str.find("kar", 3)); |
385 | 1 | ASSERT_EQ(StringView::npos, str.find("kar", 4)); |
386 | | |
387 | 1 | ASSERT_EQ(6, str.find("ban", 0)); |
388 | 1 | ASSERT_EQ(6, str.find("ban", 6)); |
389 | 1 | ASSERT_EQ(StringView::npos, str.find("ban", 7)); |
390 | | |
391 | 1 | ASSERT_EQ(10, str.find("tek", 0)); |
392 | 1 | ASSERT_EQ(10, str.find("tek", 10)); |
393 | 1 | ASSERT_EQ(StringView::npos, str.find("tek", 11)); |
394 | | |
395 | 1 | ASSERT_EQ(StringView::npos, str.find("tekk", 0)); |
396 | 1 | ASSERT_EQ(StringView::npos, str.find("tekk", 10)); |
397 | 1 | ASSERT_EQ(StringView::npos, str.find("tekk", 11)); |
398 | 1 | } |
399 | | |
400 | | TEST(StringViewTest, rfind) |
401 | 1 | { |
402 | 1 | StringView str("karkarbanatek"); |
403 | | |
404 | 1 | StringView search1("karbanatekkarbanatek"); |
405 | 1 | ASSERT_EQ(StringView::npos, str.rfind(search1, 0)); |
406 | 1 | ASSERT_EQ(StringView::npos, str.rfind(search1, 9999)); |
407 | | |
408 | 1 | StringView search2(""); |
409 | 1 | ASSERT_EQ(12, str.rfind(search2, 12)); |
410 | | |
411 | 1 | StringView search3("kar"); |
412 | 1 | ASSERT_EQ(3, str.rfind(search3, 12)); |
413 | 1 | ASSERT_EQ(3, str.rfind(search3, 3)); |
414 | 1 | ASSERT_EQ(0, str.rfind(search3, 2)); |
415 | 1 | ASSERT_EQ(0, str.rfind(search3, 0)); |
416 | | |
417 | 1 | StringView search4("ban"); |
418 | 1 | ASSERT_EQ(6, str.rfind(search4, 12)); |
419 | 1 | ASSERT_EQ(6, str.rfind(search4, 6)); |
420 | 1 | ASSERT_EQ(StringView::npos, str.rfind(search4, 5)); |
421 | | |
422 | 1 | StringView search5("tek"); |
423 | 1 | ASSERT_EQ(10, str.rfind(search5, 12)); |
424 | 1 | ASSERT_EQ(10, str.rfind(search5, 10)); |
425 | 1 | ASSERT_EQ(StringView::npos, str.rfind(search5, 9)); |
426 | | |
427 | 1 | StringView search6("tekk"); |
428 | 1 | ASSERT_EQ(StringView::npos, str.rfind(search6, 12)); |
429 | 1 | ASSERT_EQ(StringView::npos, str.rfind(search6, 10)); |
430 | 1 | ASSERT_EQ(StringView::npos, str.rfind(search6, 6)); |
431 | 1 | } |
432 | | |
433 | | TEST(StringViewTest, rFindChar) |
434 | 1 | { |
435 | 1 | StringView str("karkarbanatek"); |
436 | | |
437 | 1 | StringView search2(""); |
438 | 1 | ASSERT_EQ(10, str.rfind(search2, 10)); |
439 | | |
440 | 1 | ASSERT_EQ(12, str.rfind('k', 12)); |
441 | 1 | ASSERT_EQ(3, str.rfind('k', 11)); |
442 | 1 | ASSERT_EQ(0, str.rfind('k', 2)); |
443 | | |
444 | 1 | ASSERT_EQ(StringView::npos, str.rfind('m', 12)); |
445 | 1 | } |
446 | | |
447 | | TEST(StringViewTest, rFindCharStr) |
448 | 1 | { |
449 | 1 | StringView str("karkarbanatek"); |
450 | | |
451 | 1 | ASSERT_EQ(StringView::npos, str.rfind("karbanatekkarbanatek", 0)); |
452 | 1 | ASSERT_EQ(StringView::npos, str.rfind("karbanatekkarbanatek", 9999)); |
453 | | |
454 | 1 | ASSERT_EQ(12, str.rfind("", 12)); |
455 | | |
456 | 1 | ASSERT_EQ(3, str.rfind("kar", 12)); |
457 | 1 | ASSERT_EQ(3, str.rfind("kar", 3)); |
458 | 1 | ASSERT_EQ(0, str.rfind("kar", 2)); |
459 | 1 | ASSERT_EQ(0, str.rfind("kar", 0)); |
460 | | |
461 | 1 | ASSERT_EQ(6, str.rfind("ban", 12)); |
462 | 1 | ASSERT_EQ(6, str.rfind("ban", 6)); |
463 | 1 | ASSERT_EQ(StringView::npos, str.rfind("ban", 5)); |
464 | | |
465 | 1 | ASSERT_EQ(10, str.rfind("tek", 12)); |
466 | 1 | ASSERT_EQ(10, str.rfind("tek", 10)); |
467 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tek", 9)); |
468 | | |
469 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tekk", 12)); |
470 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tekk", 10)); |
471 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tekk", 6)); |
472 | 1 | } |
473 | | |
474 | | TEST(StringViewTest, rFindCharStrLen) |
475 | 1 | { |
476 | 1 | StringView str("karkarbanatek"); |
477 | | |
478 | 1 | ASSERT_EQ(StringView::npos, str.rfind("karbanatekkarbanatek", 0, 20)); |
479 | 1 | ASSERT_EQ(StringView::npos, str.rfind("karbanatekkarbanatek", 9999, 20)); |
480 | | |
481 | 1 | ASSERT_EQ(12, str.rfind("", 12, 0)); |
482 | | |
483 | 1 | ASSERT_EQ(3, str.rfind("kar", 12, 3)); |
484 | 1 | ASSERT_EQ(3, str.rfind("kar", 3, 3)); |
485 | 1 | ASSERT_EQ(0, str.rfind("kar", 2, 3)); |
486 | 1 | ASSERT_EQ(0, str.rfind("kar", 0, 3)); |
487 | | |
488 | 1 | ASSERT_EQ(6, str.rfind("ban", 12, 3)); |
489 | 1 | ASSERT_EQ(6, str.rfind("ban", 6, 3)); |
490 | 1 | ASSERT_EQ(StringView::npos, str.rfind("ban", 5, 3)); |
491 | | |
492 | 1 | ASSERT_EQ(10, str.rfind("tek", 12, 3)); |
493 | 1 | ASSERT_EQ(10, str.rfind("tek", 10, 3)); |
494 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tek", 9, 3)); |
495 | | |
496 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tekk", 12, 4)); |
497 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tekk", 10, 4)); |
498 | 1 | ASSERT_EQ(StringView::npos, str.rfind("tekk", 6, 4)); |
499 | 1 | } |
500 | | |
501 | | TEST(StringViewTest, findFirstOf) |
502 | 1 | { |
503 | 1 | StringView str("karbanatekx"); |
504 | | |
505 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of(StringView(""), 0)); |
506 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of(StringView("pqs"), 0)); |
507 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of(StringView("kbt"), 11)); |
508 | | |
509 | 1 | ASSERT_EQ(0, str.find_first_of(StringView("kbt"), 0)); |
510 | 1 | ASSERT_EQ(3, str.find_first_of(StringView("kbt"), 1)); |
511 | 1 | ASSERT_EQ(3, str.find_first_of(StringView("kbt"), 3)); |
512 | 1 | ASSERT_EQ(7, str.find_first_of(StringView("kbt"), 4)); |
513 | 1 | ASSERT_EQ(7, str.find_first_of(StringView("kbt"), 7)); |
514 | 1 | ASSERT_EQ(9, str.find_first_of(StringView("kbt"), 8)); |
515 | 1 | ASSERT_EQ(9, str.find_first_of(StringView("kbt"), 9)); |
516 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of(StringView("kbt"), 10)); |
517 | 1 | } |
518 | | |
519 | | TEST(StringViewTest, findFirstOfChar) |
520 | 1 | { |
521 | 1 | StringView str("karbanatekx"); |
522 | | |
523 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of('s', 0)); |
524 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of('k', 11)); |
525 | | |
526 | 1 | ASSERT_EQ(0, str.find_first_of('k', 0)); |
527 | 1 | ASSERT_EQ(3, str.find_first_of('b', 0)); |
528 | 1 | ASSERT_EQ(3, str.find_first_of('b', 3)); |
529 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of('b', 4)); |
530 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of('k', 10)); |
531 | 1 | } |
532 | | |
533 | | TEST(StringViewTest, findFirstOfCharStr) |
534 | 1 | { |
535 | 1 | StringView str("karbanatekx"); |
536 | | |
537 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("", 0)); |
538 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("pqs", 0)); |
539 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("kbt", 11)); |
540 | | |
541 | 1 | ASSERT_EQ(0, str.find_first_of("kbt", 0)); |
542 | 1 | ASSERT_EQ(3, str.find_first_of("kbt", 1)); |
543 | 1 | ASSERT_EQ(3, str.find_first_of("kbt", 3)); |
544 | 1 | ASSERT_EQ(7, str.find_first_of("kbt", 4)); |
545 | 1 | ASSERT_EQ(7, str.find_first_of("kbt", 7)); |
546 | 1 | ASSERT_EQ(9, str.find_first_of("kbt", 8)); |
547 | 1 | ASSERT_EQ(9, str.find_first_of("kbt", 9)); |
548 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("kbt", 10)); |
549 | 1 | } |
550 | | |
551 | | TEST(StringViewTest, findFirstOfCharStrLen) |
552 | 1 | { |
553 | 1 | StringView str("karbanatekx"); |
554 | | |
555 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("", 0, 0)); |
556 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("pqs", 0, 3)); |
557 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("kbt", 11, 3)); |
558 | | |
559 | 1 | ASSERT_EQ(0, str.find_first_of("kbt", 0, 3)); |
560 | 1 | ASSERT_EQ(3, str.find_first_of("kbt", 1, 3)); |
561 | 1 | ASSERT_EQ(3, str.find_first_of("kbt", 3, 3)); |
562 | 1 | ASSERT_EQ(7, str.find_first_of("kbt", 4, 3)); |
563 | 1 | ASSERT_EQ(7, str.find_first_of("kbt", 7, 3)); |
564 | 1 | ASSERT_EQ(9, str.find_first_of("kbt", 8, 3)); |
565 | 1 | ASSERT_EQ(9, str.find_first_of("kbt", 9, 3)); |
566 | 1 | ASSERT_EQ(StringView::npos, str.find_first_of("kbt", 10, 3)); |
567 | 1 | } |
568 | | |
569 | | TEST(StringViewTest, findLastOf) |
570 | 1 | { |
571 | 1 | StringView str("karbanatekx"); |
572 | | |
573 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of(StringView(""), 10)); |
574 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of(StringView("pqs"), 10)); |
575 | | |
576 | 1 | ASSERT_EQ(9, str.find_last_of(StringView("kbt"), 10)); |
577 | 1 | ASSERT_EQ(9, str.find_last_of(StringView("kbt"), 9)); |
578 | 1 | ASSERT_EQ(3, str.find_last_of(StringView("kbt"), 4)); |
579 | 1 | ASSERT_EQ(3, str.find_last_of(StringView("kbt"), 3)); |
580 | 1 | ASSERT_EQ(0, str.find_last_of(StringView("kbt"), 2)); |
581 | 1 | ASSERT_EQ(0, str.find_last_of(StringView("kbt"), 1)); |
582 | 1 | ASSERT_EQ(0, str.find_last_of(StringView("kbt"), 0)); |
583 | | |
584 | 1 | StringView empty(""); |
585 | 1 | ASSERT_EQ(StringView::npos, empty.find_last_of(StringView("text"), 0)); |
586 | 1 | ASSERT_EQ(StringView::npos, empty.find_last_of(StringView(""), 0)); |
587 | 1 | } |
588 | | |
589 | | TEST(StringViewTest, findLastOfChar) |
590 | 1 | { |
591 | 1 | StringView str("karbanatekx"); |
592 | | |
593 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of('s', 10)); |
594 | | |
595 | 1 | ASSERT_EQ(8, str.find_last_of('e', 10)); |
596 | 1 | ASSERT_EQ(8, str.find_last_of('e', 9)); |
597 | 1 | ASSERT_EQ(8, str.find_last_of('e', 8)); |
598 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of('e', 7)); |
599 | 1 | } |
600 | | |
601 | | TEST(StringViewTest, findLastOfCharStrLen) |
602 | 1 | { |
603 | 1 | StringView str("karbanatekx"); |
604 | | |
605 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of("", 10, 0)); |
606 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of("pqs", 10, 3)); |
607 | | |
608 | 1 | ASSERT_EQ(9, str.find_last_of("kbt", 10, 3)); |
609 | 1 | ASSERT_EQ(9, str.find_last_of("kbt", 9, 3)); |
610 | 1 | ASSERT_EQ(3, str.find_last_of("kbt", 4, 3)); |
611 | 1 | ASSERT_EQ(3, str.find_last_of("kbt", 3, 3)); |
612 | 1 | ASSERT_EQ(0, str.find_last_of("kbt", 2, 3)); |
613 | 1 | ASSERT_EQ(0, str.find_last_of("kbt", 1, 3)); |
614 | 1 | ASSERT_EQ(0, str.find_last_of("kbt", 0, 3)); |
615 | 1 | } |
616 | | |
617 | | TEST(StringViewTest, findLastOfCharStr) |
618 | 1 | { |
619 | 1 | StringView str("karbanatekx"); |
620 | | |
621 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of("", 10)); |
622 | 1 | ASSERT_EQ(StringView::npos, str.find_last_of("pqs", 10)); |
623 | | |
624 | 1 | ASSERT_EQ(9, str.find_last_of("kbt", 10)); |
625 | 1 | ASSERT_EQ(9, str.find_last_of("kbt", 9)); |
626 | 1 | ASSERT_EQ(3, str.find_last_of("kbt", 4)); |
627 | 1 | ASSERT_EQ(3, str.find_last_of("kbt", 3)); |
628 | 1 | ASSERT_EQ(0, str.find_last_of("kbt", 2)); |
629 | 1 | ASSERT_EQ(0, str.find_last_of("kbt", 1)); |
630 | 1 | ASSERT_EQ(0, str.find_last_of("kbt", 0)); |
631 | 1 | } |
632 | | |
633 | | TEST(StringViewTest, findFirstNotOf) |
634 | 1 | { |
635 | 1 | StringView str("karbanatekx"); |
636 | | |
637 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of(StringView(""), 0)); |
638 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of(StringView("karbntex"), 0)); |
639 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of(StringView("pqs"), 11)); |
640 | | |
641 | 1 | ASSERT_EQ(0, str.find_first_not_of(StringView("arb"), 0)); |
642 | 1 | ASSERT_EQ(5, str.find_first_not_of(StringView("arb"), 1)); |
643 | 1 | ASSERT_EQ(5, str.find_first_not_of(StringView("arb"), 5)); |
644 | 1 | ASSERT_EQ(7, str.find_first_not_of(StringView("arb"), 6)); |
645 | 1 | ASSERT_EQ(7, str.find_first_not_of(StringView("arb"), 7)); |
646 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of(StringView("tekx"), 8)); |
647 | 1 | } |
648 | | |
649 | | TEST(StringViewTest, findFirstNotOfChar) |
650 | 1 | { |
651 | 1 | StringView str("karbanatekx"); |
652 | | |
653 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of('m', 11)); |
654 | 1 | ASSERT_EQ(0, str.find_first_not_of('m', 0)); |
655 | 1 | ASSERT_EQ(0, str.find_first_not_of('a', 0)); |
656 | 1 | ASSERT_EQ(2, str.find_first_not_of('a', 1)); |
657 | 1 | ASSERT_EQ(7, str.find_first_not_of('a', 7)); |
658 | 1 | } |
659 | | |
660 | | TEST(StringViewTest, findFirstNotOfCharStrLen) |
661 | 1 | { |
662 | 1 | StringView str("karbanatekx"); |
663 | | |
664 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("", 0, 0)); |
665 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("karbntex", 0, 8)); |
666 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("pqs", 11, 3)); |
667 | | |
668 | 1 | ASSERT_EQ(0, str.find_first_not_of("arb", 0, 3)); |
669 | 1 | ASSERT_EQ(5, str.find_first_not_of("arb", 1, 3)); |
670 | 1 | ASSERT_EQ(5, str.find_first_not_of("arb", 5, 3)); |
671 | 1 | ASSERT_EQ(7, str.find_first_not_of("arb", 6, 3)); |
672 | 1 | ASSERT_EQ(7, str.find_first_not_of("arb", 7, 3)); |
673 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("tekx", 8, 4)); |
674 | 1 | } |
675 | | |
676 | | TEST(StringViewTest, findFirstNotOfCharStr) |
677 | 1 | { |
678 | 1 | StringView str("karbanatekx"); |
679 | | |
680 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("", 0)); |
681 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("karbntex", 0)); |
682 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("pqs", 11)); |
683 | | |
684 | 1 | ASSERT_EQ(0, str.find_first_not_of("arb", 0)); |
685 | 1 | ASSERT_EQ(5, str.find_first_not_of("arb", 1)); |
686 | 1 | ASSERT_EQ(5, str.find_first_not_of("arb", 5)); |
687 | 1 | ASSERT_EQ(7, str.find_first_not_of("arb", 6)); |
688 | 1 | ASSERT_EQ(7, str.find_first_not_of("arb", 7)); |
689 | 1 | ASSERT_EQ(StringView::npos, str.find_first_not_of("tekx", 8)); |
690 | 1 | } |
691 | | |
692 | | TEST(StringViewTest, findLastNotOf) |
693 | 1 | { |
694 | 1 | StringView str("karbanatekx"); |
695 | | |
696 | 1 | ASSERT_EQ(StringView::npos, str.find_last_not_of(StringView(""), 10)); |
697 | 1 | ASSERT_EQ(StringView::npos, str.find_last_not_of(StringView("karbntex"), 10)); |
698 | | |
699 | 1 | ASSERT_EQ(10, str.find_last_not_of(StringView("arb"), 10)); |
700 | 1 | ASSERT_EQ(9, str.find_last_not_of(StringView("arb"), 9)); |
701 | 1 | ASSERT_EQ(5, str.find_last_not_of(StringView("arb"), 6)); |
702 | 1 | ASSERT_EQ(5, str.find_last_not_of(StringView("arb"), 5)); |
703 | 1 | ASSERT_EQ(0, str.find_last_not_of(StringView("arb"), 4)); |
704 | 1 | ASSERT_EQ(0, str.find_last_not_of(StringView("arb"), 0)); |
705 | | |
706 | 1 | StringView empty(""); |
707 | 1 | ASSERT_EQ(StringView::npos, empty.find_last_not_of(StringView("text"), 0)); |
708 | 1 | ASSERT_EQ(StringView::npos, empty.find_last_not_of(StringView(""), 0)); |
709 | 1 | } |
710 | | |
711 | | TEST(StringViewTest, findLastNotOfChar) |
712 | 1 | { |
713 | 1 | StringView str("karbanatekx"); |
714 | | |
715 | 1 | ASSERT_EQ(10, str.find_last_not_of('m', 10)); |
716 | 1 | ASSERT_EQ(8, str.find_last_not_of('k', 9)); |
717 | 1 | ASSERT_EQ(7, str.find_last_not_of('e', 8)); |
718 | 1 | ASSERT_EQ(3, str.find_last_not_of('e', 3)); |
719 | 1 | ASSERT_EQ(2, str.find_last_not_of('b', 3)); |
720 | 1 | ASSERT_EQ(StringView::npos, str.find_last_not_of('k', 0)); |
721 | 1 | } |
722 | | |
723 | | TEST(StringViewTest, findLastNotOfCharStrLen) |
724 | 1 | { |
725 | 1 | StringView str("karbanatekx"); |
726 | | |
727 | 1 | ASSERT_EQ(StringView::npos, str.find_last_not_of("", 10, 0)); |
728 | 1 | ASSERT_EQ(StringView::npos, str.find_last_not_of("karbntex", 10, 8)); |
729 | | |
730 | 1 | ASSERT_EQ(10, str.find_last_not_of("arb", 10, 3)); |
731 | 1 | ASSERT_EQ(9, str.find_last_not_of("arb", 9, 3)); |
732 | 1 | ASSERT_EQ(5, str.find_last_not_of("arb", 6, 3)); |
733 | 1 | ASSERT_EQ(5, str.find_last_not_of("arb", 5, 3)); |
734 | 1 | ASSERT_EQ(0, str.find_last_not_of("arb", 4, 3)); |
735 | 1 | ASSERT_EQ(0, str.find_last_not_of("arb", 0, 3)); |
736 | 1 | } |
737 | | |
738 | | TEST(StringViewTest, findLastNotOfCharStr) |
739 | 1 | { |
740 | 1 | StringView str("karbanatekx"); |
741 | | |
742 | 1 | ASSERT_EQ(StringView::npos, str.find_last_not_of("", 10)); |
743 | 1 | ASSERT_EQ(StringView::npos, str.find_last_not_of("karbntex", 10)); |
744 | | |
745 | 1 | ASSERT_EQ(10, str.find_last_not_of("arb", 10)); |
746 | 1 | ASSERT_EQ(9, str.find_last_not_of("arb", 9)); |
747 | 1 | ASSERT_EQ(5, str.find_last_not_of("arb", 6)); |
748 | 1 | ASSERT_EQ(5, str.find_last_not_of("arb", 5)); |
749 | 1 | ASSERT_EQ(0, str.find_last_not_of("arb", 4)); |
750 | 1 | ASSERT_EQ(0, str.find_last_not_of("arb", 0)); |
751 | 1 | } |
752 | | |
753 | | TEST(StringViewTest, comparisonOperator) |
754 | 1 | { |
755 | 1 | StringView str1("text"); |
756 | 1 | StringView str2("text"); |
757 | 1 | StringView str3("texts"); |
758 | 1 | ASSERT_TRUE(str1 == str2); |
759 | 1 | ASSERT_TRUE(str1 != str3); |
760 | 1 | ASSERT_TRUE(str1 < str3); |
761 | 1 | ASSERT_TRUE(str1 <= str3); |
762 | 1 | ASSERT_TRUE(str3 > str2); |
763 | 1 | ASSERT_TRUE(str3 >= str2); |
764 | 1 | } |
765 | | |
766 | | TEST(StringViewTest, makeStringView) |
767 | 1 | { |
768 | 1 | StringView str1 = makeStringView("text"); |
769 | 1 | char textWithoutTermZero[] = {'t', 'e', 'x', 't'}; |
770 | 1 | StringView str2 = makeStringView(textWithoutTermZero); |
771 | 1 | ASSERT_EQ(str1, str2); |
772 | | |
773 | 1 | StringView empty = makeStringView(""); |
774 | 1 | ASSERT_EQ(""_sv, empty); |
775 | 1 | } |
776 | | |
777 | | TEST(StringViewTest, stringViewToString) |
778 | 1 | { |
779 | 1 | StringView str("text"); |
780 | 1 | const std::string convertedStr = stringViewToString(str); |
781 | 1 | ASSERT_EQ("text", convertedStr); |
782 | 1 | } |
783 | | |
784 | | TEST(StringViewTest, appendStringViewToString) |
785 | 1 | { |
786 | 1 | StringView str("text"); |
787 | 1 | std::string convertedStr("another "); |
788 | 1 | convertedStr += str; |
789 | 1 | ASSERT_EQ("another text", convertedStr); |
790 | 1 | } |
791 | | |
792 | | TEST(StringViewTest, toString) |
793 | 1 | { |
794 | 1 | StringView str("text"); |
795 | 1 | const std::string convertedStr = toString(str); |
796 | 1 | ASSERT_EQ("text", convertedStr); |
797 | 1 | } |
798 | | |
799 | | TEST(StringViewTest, cppRuntimeExceptionOperator) |
800 | 1 | { |
801 | 1 | CppRuntimeException exception = CppRuntimeException() << "test"_sv; |
802 | 1 | ASSERT_STREQ("test", exception.what()); |
803 | 1 | } |
804 | | |
805 | | TEST(StringViewTest, literal) |
806 | 1 | { |
807 | 1 | StringView str1("text"); |
808 | 1 | StringView str2 = "text"_sv; |
809 | 1 | ASSERT_EQ(str2, str1); |
810 | 1 | } |
811 | | |
812 | | } // namespace zserio |