1.1 --- a/test/test_string.cpp Tue Sep 20 10:37:29 2022 +0200 1.2 +++ b/test/test_string.cpp Tue Oct 04 18:49:14 2022 +0200 1.3 @@ -31,6 +31,8 @@ 1.4 1.5 #include <gtest/gtest.h> 1.6 1.7 +#define EXPECT_ZERO_TERMINATED(str) EXPECT_EQ((str).ptr[(str).length], '\0') 1.8 + 1.9 TEST(String, construct) { 1.10 cxstring s1 = cx_str("1234"); 1.11 cxstring s2 = cx_strn("abcd", 2); 1.12 @@ -55,6 +57,22 @@ 1.13 EXPECT_TRUE(alloc.verify()); 1.14 } 1.15 1.16 +TEST(String, strdup) { 1.17 + cxstring str = CX_STR("test"); 1.18 + cxmutstr dup = cx_strdup(str); 1.19 + ASSERT_EQ(dup.length, str.length); 1.20 + EXPECT_STREQ(dup.ptr, str.ptr); 1.21 + EXPECT_ZERO_TERMINATED(dup); 1.22 + cx_strfree(&dup); 1.23 + 1.24 + str.length = 2; 1.25 + dup = cx_strdup(str); 1.26 + ASSERT_EQ(dup.length, str.length); 1.27 + EXPECT_STREQ(dup.ptr, "te"); 1.28 + EXPECT_ZERO_TERMINATED(dup); 1.29 + cx_strfree(&dup); 1.30 +} 1.31 + 1.32 TEST(String, strlen) { 1.33 cxstring s1 = CX_STR("1234"); 1.34 cxstring s2 = CX_STR(".:.:."); 1.35 @@ -210,7 +228,6 @@ 1.36 EXPECT_GT(cx_strcasecmp(str, cx_str("compare")), 0); 1.37 } 1.38 1.39 - 1.40 TEST(String, strcat) { 1.41 cxstring s1 = CX_STR("12"); 1.42 cxstring s2 = CX_STR("34"); 1.43 @@ -221,18 +238,22 @@ 1.44 1.45 cxmutstr t1 = cx_strcat_a(&alloc, 2, s1, s2); 1.46 EXPECT_EQ(cx_strcmp(cx_strcast(t1), cx_str("1234")), 0); 1.47 + EXPECT_ZERO_TERMINATED(t1); 1.48 cx_strfree_a(&alloc, &t1); 1.49 1.50 cxmutstr t2 = cx_strcat_a(&alloc, 3, s1, s2, s3); 1.51 EXPECT_EQ(cx_strcmp(cx_strcast(t2), cx_str("123456")), 0); 1.52 + EXPECT_ZERO_TERMINATED(t2); 1.53 cx_strfree_a(&alloc, &t2); 1.54 1.55 cxmutstr t3 = cx_strcat_a(&alloc, 6, s1, sn, s2, sn, s3, sn); 1.56 EXPECT_EQ(cx_strcmp(cx_strcast(t3), cx_str("123456")), 0); 1.57 + EXPECT_ZERO_TERMINATED(t3); 1.58 cx_strfree_a(&alloc, &t3); 1.59 1.60 cxmutstr t4 = cx_strcat_a(&alloc, 2, sn, sn); 1.61 EXPECT_EQ(cx_strcmp(cx_strcast(t4), cx_str("")), 0); 1.62 + EXPECT_ZERO_TERMINATED(t4); 1.63 cx_strfree_a(&alloc, &t4); 1.64 1.65 EXPECT_TRUE(alloc.verify()); 1.66 @@ -524,63 +545,75 @@ 1.67 cxstring csstr = CX_STR("test AB ab TEST xyz"); 1.68 1.69 cxmutstr repl = cx_strreplace(str, cx_str("abab"), cx_str("muchlonger")); 1.70 - cxstring expected = CX_STR("test muchlongerab string aba"); 1.71 + auto expected = "test muchlongerab string aba"; 1.72 1.73 cxmutstr repln = cx_strreplacen(str, cx_str("ab"), cx_str("c"), 2); 1.74 - cxstring expectedn = CX_STR("test ccab string aba"); 1.75 + auto expectedn = "test ccab string aba"; 1.76 1.77 cxmutstr longrepl = cx_strreplace(longstr, cx_str("a"), cx_str("z")); 1.78 - cxstring longexpect = CX_STR( 1.79 - "xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd"); 1.80 + auto longexpect = "xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd"; 1.81 1.82 cxmutstr replnotrail = cx_strreplace(notrail, cx_str("ab"), cx_str("z")); 1.83 - cxstring notrailexpect = CX_STR("test zz"); 1.84 + auto notrailexpect = "test zz"; 1.85 1.86 cxmutstr repleq = cx_strreplace(str, str, cx_str("hello")); 1.87 - cxstring eqexpect = CX_STR("hello"); 1.88 + auto eqexpect = "hello"; 1.89 1.90 cxmutstr replempty1 = cx_strreplace(empty, cx_str("ab"), cx_str("c")); // expect: empty 1.91 cxmutstr replempty2 = cx_strreplace(str, cx_str("abab"), empty); 1.92 - cxstring emptyexpect2 = CX_STR("test ab string aba"); 1.93 + auto emptyexpect2 = "test ab string aba"; 1.94 1.95 cxmutstr replpre = cx_strreplace(str, cx_str("test "), cx_str("TEST ")); 1.96 - cxstring preexpected = CX_STR("TEST ababab string aba"); 1.97 + auto preexpected = "TEST ababab string aba"; 1.98 1.99 cxmutstr replan1 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 1); 1.100 - cxstring an1expected = CX_STR("xaaaaaaaaa"); 1.101 + auto an1expected = "xaaaaaaaaa"; 1.102 1.103 cxmutstr replan4 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 4); 1.104 - cxstring an4expected = CX_STR("xxxxaaaaaa"); 1.105 + auto an4expected = "xxxxaaaaaa"; 1.106 1.107 cxmutstr replan9 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 9); 1.108 - cxstring an9expected = CX_STR("xxxxxxxxxa"); 1.109 + auto an9expected = "xxxxxxxxxa"; 1.110 1.111 cxmutstr replan10 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 10); 1.112 - cxstring an10expected = CX_STR("xxxxxxxxxx"); 1.113 + auto an10expected = "xxxxxxxxxx"; 1.114 1.115 cxmutstr replcs1 = cx_strreplace(csstr, cx_str("AB"), cx_str("*")); 1.116 - cxstring cs1expected = CX_STR("test * ab TEST xyz"); 1.117 + auto cs1expected = "test * ab TEST xyz"; 1.118 1.119 cxmutstr replcs2 = cx_strreplace(csstr, cx_str("test"), cx_str("TEST")); 1.120 - cxstring cs2expected = CX_STR("TEST AB ab TEST xyz"); 1.121 + auto cs2expected = "TEST AB ab TEST xyz"; 1.122 1.123 1.124 EXPECT_NE(repl.ptr, str.ptr); 1.125 - EXPECT_EQ(cx_strcmp(cx_strcast(repl), expected), 0); 1.126 - EXPECT_NE(repln.ptr, str.ptr); 1.127 - EXPECT_EQ(cx_strcmp(cx_strcast(repln), expectedn), 0); 1.128 - EXPECT_EQ(cx_strcmp(cx_strcast(longrepl), longexpect), 0); 1.129 - EXPECT_EQ(cx_strcmp(cx_strcast(replnotrail), notrailexpect), 0); 1.130 - EXPECT_EQ(cx_strcmp(cx_strcast(repleq), eqexpect), 0); 1.131 - EXPECT_EQ(cx_strcmp(cx_strcast(replempty1), empty), 0); 1.132 - EXPECT_EQ(cx_strcmp(cx_strcast(replempty2), emptyexpect2), 0); 1.133 - EXPECT_EQ(cx_strcmp(cx_strcast(replpre), preexpected), 0); 1.134 - EXPECT_EQ(cx_strcmp(cx_strcast(replan1), an1expected), 0); 1.135 - EXPECT_EQ(cx_strcmp(cx_strcast(replan4), an4expected), 0); 1.136 - EXPECT_EQ(cx_strcmp(cx_strcast(replan9), an9expected), 0); 1.137 - EXPECT_EQ(cx_strcmp(cx_strcast(replan10), an10expected), 0); 1.138 - EXPECT_EQ(cx_strcmp(cx_strcast(replcs1), cs1expected), 0); 1.139 - EXPECT_EQ(cx_strcmp(cx_strcast(replcs2), cs2expected), 0); 1.140 + EXPECT_ZERO_TERMINATED(repl); 1.141 + EXPECT_STREQ(repl.ptr, expected); 1.142 + EXPECT_ZERO_TERMINATED(repln); 1.143 + EXPECT_STREQ(repln.ptr, expectedn); 1.144 + EXPECT_ZERO_TERMINATED(longrepl); 1.145 + EXPECT_STREQ(longrepl.ptr, longexpect); 1.146 + EXPECT_ZERO_TERMINATED(replnotrail); 1.147 + EXPECT_STREQ(replnotrail.ptr, notrailexpect); 1.148 + EXPECT_ZERO_TERMINATED(repleq); 1.149 + EXPECT_STREQ(repleq.ptr, eqexpect); 1.150 + EXPECT_ZERO_TERMINATED(replempty1); 1.151 + EXPECT_STREQ(replempty1.ptr, ""); 1.152 + EXPECT_ZERO_TERMINATED(replempty2); 1.153 + EXPECT_STREQ(replempty2.ptr, emptyexpect2); 1.154 + EXPECT_ZERO_TERMINATED(replpre); 1.155 + EXPECT_STREQ(replpre.ptr, preexpected); 1.156 + EXPECT_ZERO_TERMINATED(replan1); 1.157 + EXPECT_STREQ(replan1.ptr, an1expected); 1.158 + EXPECT_ZERO_TERMINATED(replan4); 1.159 + EXPECT_STREQ(replan4.ptr, an4expected); 1.160 + EXPECT_ZERO_TERMINATED(replan9); 1.161 + EXPECT_STREQ(replan9.ptr, an9expected); 1.162 + EXPECT_ZERO_TERMINATED(replan10); 1.163 + EXPECT_STREQ(replan10.ptr, an10expected); 1.164 + EXPECT_ZERO_TERMINATED(replcs1); 1.165 + EXPECT_STREQ(replcs1.ptr, cs1expected); 1.166 + EXPECT_ZERO_TERMINATED(replcs2); 1.167 + EXPECT_STREQ(replcs2.ptr, cs2expected); 1.168 1.169 cx_strfree(&repl); 1.170 cx_strfree(&repln);