208 EXPECT_GT(cx_strcasecmp(str, cx_str("compare shit")), 0); |
226 EXPECT_GT(cx_strcasecmp(str, cx_str("compare shit")), 0); |
209 EXPECT_LT(cx_strcasecmp(str, cx_str("compare this not")), 0); |
227 EXPECT_LT(cx_strcasecmp(str, cx_str("compare this not")), 0); |
210 EXPECT_GT(cx_strcasecmp(str, cx_str("compare")), 0); |
228 EXPECT_GT(cx_strcasecmp(str, cx_str("compare")), 0); |
211 } |
229 } |
212 |
230 |
213 |
|
214 TEST(String, strcat) { |
231 TEST(String, strcat) { |
215 cxstring s1 = CX_STR("12"); |
232 cxstring s1 = CX_STR("12"); |
216 cxstring s2 = CX_STR("34"); |
233 cxstring s2 = CX_STR("34"); |
217 cxstring s3 = CX_STR("56"); |
234 cxstring s3 = CX_STR("56"); |
218 cxstring sn = {nullptr, 0}; |
235 cxstring sn = {nullptr, 0}; |
219 |
236 |
220 CxTestingAllocator alloc; |
237 CxTestingAllocator alloc; |
221 |
238 |
222 cxmutstr t1 = cx_strcat_a(&alloc, 2, s1, s2); |
239 cxmutstr t1 = cx_strcat_a(&alloc, 2, s1, s2); |
223 EXPECT_EQ(cx_strcmp(cx_strcast(t1), cx_str("1234")), 0); |
240 EXPECT_EQ(cx_strcmp(cx_strcast(t1), cx_str("1234")), 0); |
|
241 EXPECT_ZERO_TERMINATED(t1); |
224 cx_strfree_a(&alloc, &t1); |
242 cx_strfree_a(&alloc, &t1); |
225 |
243 |
226 cxmutstr t2 = cx_strcat_a(&alloc, 3, s1, s2, s3); |
244 cxmutstr t2 = cx_strcat_a(&alloc, 3, s1, s2, s3); |
227 EXPECT_EQ(cx_strcmp(cx_strcast(t2), cx_str("123456")), 0); |
245 EXPECT_EQ(cx_strcmp(cx_strcast(t2), cx_str("123456")), 0); |
|
246 EXPECT_ZERO_TERMINATED(t2); |
228 cx_strfree_a(&alloc, &t2); |
247 cx_strfree_a(&alloc, &t2); |
229 |
248 |
230 cxmutstr t3 = cx_strcat_a(&alloc, 6, s1, sn, s2, sn, s3, sn); |
249 cxmutstr t3 = cx_strcat_a(&alloc, 6, s1, sn, s2, sn, s3, sn); |
231 EXPECT_EQ(cx_strcmp(cx_strcast(t3), cx_str("123456")), 0); |
250 EXPECT_EQ(cx_strcmp(cx_strcast(t3), cx_str("123456")), 0); |
|
251 EXPECT_ZERO_TERMINATED(t3); |
232 cx_strfree_a(&alloc, &t3); |
252 cx_strfree_a(&alloc, &t3); |
233 |
253 |
234 cxmutstr t4 = cx_strcat_a(&alloc, 2, sn, sn); |
254 cxmutstr t4 = cx_strcat_a(&alloc, 2, sn, sn); |
235 EXPECT_EQ(cx_strcmp(cx_strcast(t4), cx_str("")), 0); |
255 EXPECT_EQ(cx_strcmp(cx_strcast(t4), cx_str("")), 0); |
|
256 EXPECT_ZERO_TERMINATED(t4); |
236 cx_strfree_a(&alloc, &t4); |
257 cx_strfree_a(&alloc, &t4); |
237 |
258 |
238 EXPECT_TRUE(alloc.verify()); |
259 EXPECT_TRUE(alloc.verify()); |
239 } |
260 } |
240 |
261 |
522 cxstring empty = CX_STR(""); |
543 cxstring empty = CX_STR(""); |
523 cxstring astr = CX_STR("aaaaaaaaaa"); |
544 cxstring astr = CX_STR("aaaaaaaaaa"); |
524 cxstring csstr = CX_STR("test AB ab TEST xyz"); |
545 cxstring csstr = CX_STR("test AB ab TEST xyz"); |
525 |
546 |
526 cxmutstr repl = cx_strreplace(str, cx_str("abab"), cx_str("muchlonger")); |
547 cxmutstr repl = cx_strreplace(str, cx_str("abab"), cx_str("muchlonger")); |
527 cxstring expected = CX_STR("test muchlongerab string aba"); |
548 auto expected = "test muchlongerab string aba"; |
528 |
549 |
529 cxmutstr repln = cx_strreplacen(str, cx_str("ab"), cx_str("c"), 2); |
550 cxmutstr repln = cx_strreplacen(str, cx_str("ab"), cx_str("c"), 2); |
530 cxstring expectedn = CX_STR("test ccab string aba"); |
551 auto expectedn = "test ccab string aba"; |
531 |
552 |
532 cxmutstr longrepl = cx_strreplace(longstr, cx_str("a"), cx_str("z")); |
553 cxmutstr longrepl = cx_strreplace(longstr, cx_str("a"), cx_str("z")); |
533 cxstring longexpect = CX_STR( |
554 auto longexpect = "xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd"; |
534 "xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd"); |
|
535 |
555 |
536 cxmutstr replnotrail = cx_strreplace(notrail, cx_str("ab"), cx_str("z")); |
556 cxmutstr replnotrail = cx_strreplace(notrail, cx_str("ab"), cx_str("z")); |
537 cxstring notrailexpect = CX_STR("test zz"); |
557 auto notrailexpect = "test zz"; |
538 |
558 |
539 cxmutstr repleq = cx_strreplace(str, str, cx_str("hello")); |
559 cxmutstr repleq = cx_strreplace(str, str, cx_str("hello")); |
540 cxstring eqexpect = CX_STR("hello"); |
560 auto eqexpect = "hello"; |
541 |
561 |
542 cxmutstr replempty1 = cx_strreplace(empty, cx_str("ab"), cx_str("c")); // expect: empty |
562 cxmutstr replempty1 = cx_strreplace(empty, cx_str("ab"), cx_str("c")); // expect: empty |
543 cxmutstr replempty2 = cx_strreplace(str, cx_str("abab"), empty); |
563 cxmutstr replempty2 = cx_strreplace(str, cx_str("abab"), empty); |
544 cxstring emptyexpect2 = CX_STR("test ab string aba"); |
564 auto emptyexpect2 = "test ab string aba"; |
545 |
565 |
546 cxmutstr replpre = cx_strreplace(str, cx_str("test "), cx_str("TEST ")); |
566 cxmutstr replpre = cx_strreplace(str, cx_str("test "), cx_str("TEST ")); |
547 cxstring preexpected = CX_STR("TEST ababab string aba"); |
567 auto preexpected = "TEST ababab string aba"; |
548 |
568 |
549 cxmutstr replan1 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 1); |
569 cxmutstr replan1 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 1); |
550 cxstring an1expected = CX_STR("xaaaaaaaaa"); |
570 auto an1expected = "xaaaaaaaaa"; |
551 |
571 |
552 cxmutstr replan4 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 4); |
572 cxmutstr replan4 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 4); |
553 cxstring an4expected = CX_STR("xxxxaaaaaa"); |
573 auto an4expected = "xxxxaaaaaa"; |
554 |
574 |
555 cxmutstr replan9 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 9); |
575 cxmutstr replan9 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 9); |
556 cxstring an9expected = CX_STR("xxxxxxxxxa"); |
576 auto an9expected = "xxxxxxxxxa"; |
557 |
577 |
558 cxmutstr replan10 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 10); |
578 cxmutstr replan10 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 10); |
559 cxstring an10expected = CX_STR("xxxxxxxxxx"); |
579 auto an10expected = "xxxxxxxxxx"; |
560 |
580 |
561 cxmutstr replcs1 = cx_strreplace(csstr, cx_str("AB"), cx_str("*")); |
581 cxmutstr replcs1 = cx_strreplace(csstr, cx_str("AB"), cx_str("*")); |
562 cxstring cs1expected = CX_STR("test * ab TEST xyz"); |
582 auto cs1expected = "test * ab TEST xyz"; |
563 |
583 |
564 cxmutstr replcs2 = cx_strreplace(csstr, cx_str("test"), cx_str("TEST")); |
584 cxmutstr replcs2 = cx_strreplace(csstr, cx_str("test"), cx_str("TEST")); |
565 cxstring cs2expected = CX_STR("TEST AB ab TEST xyz"); |
585 auto cs2expected = "TEST AB ab TEST xyz"; |
566 |
586 |
567 |
587 |
568 EXPECT_NE(repl.ptr, str.ptr); |
588 EXPECT_NE(repl.ptr, str.ptr); |
569 EXPECT_EQ(cx_strcmp(cx_strcast(repl), expected), 0); |
589 EXPECT_ZERO_TERMINATED(repl); |
570 EXPECT_NE(repln.ptr, str.ptr); |
590 EXPECT_STREQ(repl.ptr, expected); |
571 EXPECT_EQ(cx_strcmp(cx_strcast(repln), expectedn), 0); |
591 EXPECT_ZERO_TERMINATED(repln); |
572 EXPECT_EQ(cx_strcmp(cx_strcast(longrepl), longexpect), 0); |
592 EXPECT_STREQ(repln.ptr, expectedn); |
573 EXPECT_EQ(cx_strcmp(cx_strcast(replnotrail), notrailexpect), 0); |
593 EXPECT_ZERO_TERMINATED(longrepl); |
574 EXPECT_EQ(cx_strcmp(cx_strcast(repleq), eqexpect), 0); |
594 EXPECT_STREQ(longrepl.ptr, longexpect); |
575 EXPECT_EQ(cx_strcmp(cx_strcast(replempty1), empty), 0); |
595 EXPECT_ZERO_TERMINATED(replnotrail); |
576 EXPECT_EQ(cx_strcmp(cx_strcast(replempty2), emptyexpect2), 0); |
596 EXPECT_STREQ(replnotrail.ptr, notrailexpect); |
577 EXPECT_EQ(cx_strcmp(cx_strcast(replpre), preexpected), 0); |
597 EXPECT_ZERO_TERMINATED(repleq); |
578 EXPECT_EQ(cx_strcmp(cx_strcast(replan1), an1expected), 0); |
598 EXPECT_STREQ(repleq.ptr, eqexpect); |
579 EXPECT_EQ(cx_strcmp(cx_strcast(replan4), an4expected), 0); |
599 EXPECT_ZERO_TERMINATED(replempty1); |
580 EXPECT_EQ(cx_strcmp(cx_strcast(replan9), an9expected), 0); |
600 EXPECT_STREQ(replempty1.ptr, ""); |
581 EXPECT_EQ(cx_strcmp(cx_strcast(replan10), an10expected), 0); |
601 EXPECT_ZERO_TERMINATED(replempty2); |
582 EXPECT_EQ(cx_strcmp(cx_strcast(replcs1), cs1expected), 0); |
602 EXPECT_STREQ(replempty2.ptr, emptyexpect2); |
583 EXPECT_EQ(cx_strcmp(cx_strcast(replcs2), cs2expected), 0); |
603 EXPECT_ZERO_TERMINATED(replpre); |
|
604 EXPECT_STREQ(replpre.ptr, preexpected); |
|
605 EXPECT_ZERO_TERMINATED(replan1); |
|
606 EXPECT_STREQ(replan1.ptr, an1expected); |
|
607 EXPECT_ZERO_TERMINATED(replan4); |
|
608 EXPECT_STREQ(replan4.ptr, an4expected); |
|
609 EXPECT_ZERO_TERMINATED(replan9); |
|
610 EXPECT_STREQ(replan9.ptr, an9expected); |
|
611 EXPECT_ZERO_TERMINATED(replan10); |
|
612 EXPECT_STREQ(replan10.ptr, an10expected); |
|
613 EXPECT_ZERO_TERMINATED(replcs1); |
|
614 EXPECT_STREQ(replcs1.ptr, cs1expected); |
|
615 EXPECT_ZERO_TERMINATED(replcs2); |
|
616 EXPECT_STREQ(replcs2.ptr, cs2expected); |
584 |
617 |
585 cx_strfree(&repl); |
618 cx_strfree(&repl); |
586 cx_strfree(&repln); |
619 cx_strfree(&repln); |
587 cx_strfree(&longrepl); |
620 cx_strfree(&longrepl); |
588 cx_strfree(&replnotrail); |
621 cx_strfree(&replnotrail); |