| 69 EXPECT_EQ(len1, 4); |
69 EXPECT_EQ(len1, 4); |
| 70 EXPECT_EQ(len2, 9); |
70 EXPECT_EQ(len2, 9); |
| 71 EXPECT_EQ(len3, 10); |
71 EXPECT_EQ(len3, 10); |
| 72 } |
72 } |
| 73 |
73 |
| |
74 TEST(String, strsubs) { |
| |
75 cxstring str = CX_STR("A test string"); |
| |
76 |
| |
77 cxstring sub = cx_strsubs(str, 0); |
| |
78 EXPECT_EQ(cx_strcmp(sub, str), 0); |
| |
79 |
| |
80 sub = cx_strsubs(str, 2); |
| |
81 EXPECT_EQ(cx_strcmp(sub, cx_str("test string")), 0); |
| |
82 |
| |
83 sub = cx_strsubs(str, 7); |
| |
84 EXPECT_EQ(cx_strcmp(sub, cx_str("string")), 0); |
| |
85 |
| |
86 sub = cx_strsubs(str, 15); |
| |
87 EXPECT_EQ(cx_strcmp(sub, cx_str("")), 0); |
| |
88 |
| |
89 sub = cx_strsubsl(str, 2, 4); |
| |
90 EXPECT_EQ(cx_strcmp(sub, cx_str("test")), 0); |
| |
91 |
| |
92 sub = cx_strsubsl(str, 7, 3); |
| |
93 EXPECT_EQ(cx_strcmp(sub, cx_str("str")), 0); |
| |
94 |
| |
95 sub = cx_strsubsl(str, 7, 20); |
| |
96 EXPECT_EQ(cx_strcmp(sub, cx_str("string")), 0); |
| |
97 |
| |
98 // just for coverage, call the _m variant |
| |
99 auto m = cx_strsubs_m(cx_mutstrn(nullptr, 0), 0); |
| |
100 EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0); |
| |
101 } |
| 74 |
102 |
| 75 TEST(String, strchr) { |
103 TEST(String, strchr) { |
| 76 cxstring str = CX_STR("I will find you - and I will kill you"); |
104 cxstring str = CX_STR("I will find you - and I will kill you"); |
| 77 |
105 |
| 78 cxstring notfound = cx_strchr(str, 'x'); |
106 cxstring notfound = cx_strchr(str, 'x'); |
| 79 EXPECT_EQ(notfound.length, 0); |
107 EXPECT_EQ(notfound.length, 0); |
| 80 |
108 |
| 81 cxstring result = cx_strchr(str, 'w'); |
109 cxstring result = cx_strchr(str, 'w'); |
| 82 EXPECT_EQ(result.length, 35); |
110 EXPECT_EQ(result.length, 35); |
| 83 EXPECT_EQ(strcmp("will find you - and I will kill you", result.ptr), 0); |
111 EXPECT_EQ(strcmp("will find you - and I will kill you", result.ptr), 0); |
| |
112 |
| |
113 // just for coverage, call the _m variant |
| |
114 auto m = cx_strchr_m(cx_mutstrn(nullptr, 0), 'a'); |
| |
115 EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0); |
| 84 } |
116 } |
| 85 |
117 |
| 86 TEST(String, strrchr) { |
118 TEST(String, strrchr) { |
| 87 cxstring str = CX_STR("I will find you - and I will kill you"); |
119 cxstring str = CX_STR("I will find you - and I will kill you"); |
| 88 |
120 |
| 90 EXPECT_EQ(notfound.length, 0); |
122 EXPECT_EQ(notfound.length, 0); |
| 91 |
123 |
| 92 cxstring result = cx_strrchr(str, 'w'); |
124 cxstring result = cx_strrchr(str, 'w'); |
| 93 EXPECT_EQ(result.length, 13); |
125 EXPECT_EQ(result.length, 13); |
| 94 EXPECT_EQ(strcmp("will kill you", result.ptr), 0); |
126 EXPECT_EQ(strcmp("will kill you", result.ptr), 0); |
| |
127 |
| |
128 // just for coverage, call the _m variant |
| |
129 auto m = cx_strrchr_m(cx_mutstrn(nullptr, 0), 'a'); |
| |
130 EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0); |
| 95 } |
131 } |
| 96 |
132 |
| 97 TEST(String, strstr) { |
133 TEST(String, strstr) { |
| 98 cxstring str = CX_STR("find the match in this string"); |
134 cxstring str = CX_STR("find the match in this string"); |
| 99 cxstring longstr = CX_STR( |
135 cxstring longstr = CX_STR( |
| 137 EXPECT_EQ(strcmp(str.ptr, result.ptr), 0); |
173 EXPECT_EQ(strcmp(str.ptr, result.ptr), 0); |
| 138 |
174 |
| 139 result = cx_strstr(longstr, longstrpattern); |
175 result = cx_strstr(longstr, longstrpattern); |
| 140 EXPECT_EQ(result.length, longstrresult.length); |
176 EXPECT_EQ(result.length, longstrresult.length); |
| 141 EXPECT_EQ(strcmp(result.ptr, longstrresult.ptr), 0); |
177 EXPECT_EQ(strcmp(result.ptr, longstrresult.ptr), 0); |
| |
178 |
| |
179 // just for coverage, call the _m variant |
| |
180 auto mstr = cx_strdup(longstr); |
| |
181 auto m = cx_strstr_m(mstr, longstrpattern); |
| |
182 EXPECT_EQ(m.length, longstrresult.length); |
| |
183 EXPECT_EQ(strcmp(m.ptr, longstrresult.ptr), 0); |
| |
184 cx_strfree(&mstr); |
| 142 } |
185 } |
| 143 |
186 |
| 144 TEST(String, strcmp) { |
187 TEST(String, strcmp) { |
| 145 cxstring str = CX_STR("compare this"); |
188 cxstring str = CX_STR("compare this"); |
| 146 |
189 |
| 281 n = cx_strsplit(test, cx_str("is,"), capa, list); |
324 n = cx_strsplit(test, cx_str("is,"), capa, list); |
| 282 ASSERT_EQ(n, 3); |
325 ASSERT_EQ(n, 3); |
| 283 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0); |
326 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0); |
| 284 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0); |
327 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0); |
| 285 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0); |
328 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0); |
| |
329 |
| |
330 /* call the _m variant just for coverage */ |
| |
331 auto mtest = cx_strdup(test); |
| |
332 cxmutstr mlist[4]; |
| |
333 n = cx_strsplit_m(mtest, cx_str("is,"), 4, mlist); |
| |
334 ASSERT_EQ(n, 3); |
| |
335 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), cx_str("th")), 0); |
| |
336 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), cx_str("")), 0); |
| |
337 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), cx_str("a,csv,string")), 0); |
| |
338 cx_strfree(&mtest); |
| 286 } |
339 } |
| 287 |
340 |
| 288 TEST(String, strsplit_a) { |
341 TEST(String, strsplit_a) { |
| 289 CxTestingAllocator alloc; |
342 CxTestingAllocator alloc; |
| 290 |
343 |
| 385 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0); |
438 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0); |
| 386 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0); |
439 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0); |
| 387 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0); |
440 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0); |
| 388 cxFree(&alloc, list); |
441 cxFree(&alloc, list); |
| 389 |
442 |
| |
443 /* call the _m variant just for coverage */ |
| |
444 auto mtest = cx_strdup(test); |
| |
445 cxmutstr *mlist; |
| |
446 n = cx_strsplit_ma(&alloc, mtest, cx_str("is,"), 4, &mlist); |
| |
447 ASSERT_EQ(n, 3); |
| |
448 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), cx_str("th")), 0); |
| |
449 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), cx_str("")), 0); |
| |
450 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), cx_str("a,csv,string")), 0); |
| |
451 cxFree(&alloc, mlist); |
| |
452 cx_strfree(&mtest); |
| |
453 |
| 390 EXPECT_TRUE(alloc.verify()); |
454 EXPECT_TRUE(alloc.verify()); |
| 391 } |
455 } |
| 392 |
456 |
| 393 TEST(String, strtrim) { |
457 TEST(String, strtrim) { |
| 394 cxstring t1 = cx_strtrim(cx_str(" ein test \t ")); |
458 cxstring t1 = cx_strtrim(cx_str(" ein test \t ")); |
| 402 EXPECT_EQ(cx_strcmp(t2, cx_str("abc")), 0); |
466 EXPECT_EQ(cx_strcmp(t2, cx_str("abc")), 0); |
| 403 EXPECT_EQ(cx_strcmp(t3, cx_str("123")), 0); |
467 EXPECT_EQ(cx_strcmp(t3, cx_str("123")), 0); |
| 404 EXPECT_EQ(cx_strcmp(t4, cx_str("xyz")), 0); |
468 EXPECT_EQ(cx_strcmp(t4, cx_str("xyz")), 0); |
| 405 EXPECT_EQ(cx_strcmp(t5, cx_str("")), 0); |
469 EXPECT_EQ(cx_strcmp(t5, cx_str("")), 0); |
| 406 EXPECT_EQ(cx_strcmp(empty, cx_str("")), 0); |
470 EXPECT_EQ(cx_strcmp(empty, cx_str("")), 0); |
| |
471 |
| |
472 /* call the _m variant just for coverage */ |
| |
473 cxmutstr m1 = cx_strtrim_m(cx_mutstr((char *) " ein test \t ")); |
| |
474 EXPECT_EQ(cx_strcmp(cx_strcast(m1), cx_str("ein test")), 0); |
| 407 } |
475 } |
| 408 |
476 |
| 409 TEST(String, strprefix) { |
477 TEST(String, strprefix) { |
| 410 cxstring str = CX_STR("test my prefix and my suffix"); |
478 cxstring str = CX_STR("test my prefix and my suffix"); |
| 411 cxstring empty = CX_STR(""); |
479 cxstring empty = CX_STR(""); |