test/test_string.cpp

changeset 589
c290f8fd979e
parent 588
6a3cd8f0a2cf
child 597
8b48126671cf
     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);

mercurial