Coverage Report

Created: 2024-04-30 09:35

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