Coverage Report

Created: 2023-12-13 14:58

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