change CX_STR: use compound literal in C and ctor in C++

Mon, 17 Apr 2023 21:47:34 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 17 Apr 2023 21:47:34 +0200
changeset 684
380bd45bc94a
parent 683
aa0d09f2d81c
child 685
2dd841e364af

change CX_STR: use compound literal in C and ctor in C++

src/cx/string.h file | annotate | diff | comparison | revisions
tests/test_string.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/cx/string.h	Sun Apr 16 21:35:08 2023 +0200
     1.2 +++ b/src/cx/string.h	Mon Apr 17 21:47:34 2023 +0200
     1.3 @@ -129,6 +129,18 @@
     1.4   */
     1.5  typedef struct cx_strtok_ctx_s CxStrtokCtx;
     1.6  
     1.7 +#ifdef __cplusplus
     1.8 +extern "C" {
     1.9 +
    1.10 +/**
    1.11 + * A literal initializer for an UCX string structure.
    1.12 + *
    1.13 + * @param literal the string literal
    1.14 + */
    1.15 +#define CX_STR(literal) cxstring{literal, sizeof(literal) - 1}
    1.16 +
    1.17 +#else // __cplusplus
    1.18 +
    1.19  /**
    1.20   * A literal initializer for an UCX string structure.
    1.21   *
    1.22 @@ -136,10 +148,8 @@
    1.23   *
    1.24   * @param literal the string literal
    1.25   */
    1.26 -#define CX_STR(literal) {literal, sizeof(literal) - 1}
    1.27 +#define CX_STR(literal) (cxstring){literal, sizeof(literal) - 1}
    1.28  
    1.29 -#ifdef __cplusplus
    1.30 -extern "C" {
    1.31  #endif
    1.32  
    1.33  
     2.1 --- a/tests/test_string.cpp	Sun Apr 16 21:35:08 2023 +0200
     2.2 +++ b/tests/test_string.cpp	Mon Apr 17 21:47:34 2023 +0200
     2.3 @@ -34,7 +34,7 @@
     2.4  #define EXPECT_ZERO_TERMINATED(str) EXPECT_EQ((str).ptr[(str).length], '\0')
     2.5  
     2.6  TEST(String, construct) {
     2.7 -    cxstring s1 = cx_str("1234");
     2.8 +    cxstring s1 = CX_STR("1234");
     2.9      cxstring s2 = cx_strn("abcd", 2);
    2.10      cxmutstr s3 = cx_mutstr((char *) "1234");
    2.11      cxmutstr s4 = cx_mutstrn((char *) "abcd", 2);
    2.12 @@ -96,26 +96,26 @@
    2.13      EXPECT_EQ(cx_strcmp(sub, str), 0);
    2.14  
    2.15      sub = cx_strsubs(str, 2);
    2.16 -    EXPECT_EQ(cx_strcmp(sub, cx_str("test string")), 0);
    2.17 +    EXPECT_EQ(cx_strcmp(sub, CX_STR("test string")), 0);
    2.18  
    2.19      sub = cx_strsubs(str, 7);
    2.20 -    EXPECT_EQ(cx_strcmp(sub, cx_str("string")), 0);
    2.21 +    EXPECT_EQ(cx_strcmp(sub, CX_STR("string")), 0);
    2.22  
    2.23      sub = cx_strsubs(str, 15);
    2.24 -    EXPECT_EQ(cx_strcmp(sub, cx_str("")), 0);
    2.25 +    EXPECT_EQ(cx_strcmp(sub, CX_STR("")), 0);
    2.26  
    2.27      sub = cx_strsubsl(str, 2, 4);
    2.28 -    EXPECT_EQ(cx_strcmp(sub, cx_str("test")), 0);
    2.29 +    EXPECT_EQ(cx_strcmp(sub, CX_STR("test")), 0);
    2.30  
    2.31      sub = cx_strsubsl(str, 7, 3);
    2.32 -    EXPECT_EQ(cx_strcmp(sub, cx_str("str")), 0);
    2.33 +    EXPECT_EQ(cx_strcmp(sub, CX_STR("str")), 0);
    2.34  
    2.35      sub = cx_strsubsl(str, 7, 20);
    2.36 -    EXPECT_EQ(cx_strcmp(sub, cx_str("string")), 0);
    2.37 +    EXPECT_EQ(cx_strcmp(sub, CX_STR("string")), 0);
    2.38  
    2.39      // just for coverage, call the _m variant
    2.40      auto m = cx_strsubs_m(cx_mutstrn(nullptr, 0), 0);
    2.41 -    EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0);
    2.42 +    EXPECT_EQ(cx_strcmp(cx_strcast(m), CX_STR("")), 0);
    2.43  }
    2.44  
    2.45  TEST(String, strchr) {
    2.46 @@ -130,7 +130,7 @@
    2.47  
    2.48      // just for coverage, call the _m variant
    2.49      auto m = cx_strchr_m(cx_mutstrn(nullptr, 0), 'a');
    2.50 -    EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0);
    2.51 +    EXPECT_EQ(cx_strcmp(cx_strcast(m), CX_STR("")), 0);
    2.52  }
    2.53  
    2.54  TEST(String, strrchr) {
    2.55 @@ -145,7 +145,7 @@
    2.56  
    2.57      // just for coverage, call the _m variant
    2.58      auto m = cx_strrchr_m(cx_mutstrn(nullptr, 0), 'a');
    2.59 -    EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0);
    2.60 +    EXPECT_EQ(cx_strcmp(cx_strcast(m), CX_STR("")), 0);
    2.61  }
    2.62  
    2.63  TEST(String, strstr) {
    2.64 @@ -179,14 +179,14 @@
    2.65              "wxyz1234567890"
    2.66      );
    2.67  
    2.68 -    cxstring notfound = cx_strstr(str, cx_str("no match"));
    2.69 +    cxstring notfound = cx_strstr(str, CX_STR("no match"));
    2.70      EXPECT_EQ(notfound.length, 0);
    2.71  
    2.72 -    cxstring result = cx_strstr(str, cx_str("match"));
    2.73 +    cxstring result = cx_strstr(str, CX_STR("match"));
    2.74      EXPECT_EQ(result.length, 20);
    2.75      EXPECT_STREQ(result.ptr, "match in this string");
    2.76  
    2.77 -    result = cx_strstr(str, cx_str(""));
    2.78 +    result = cx_strstr(str, CX_STR(""));
    2.79      EXPECT_EQ(result.length, str.length);
    2.80      EXPECT_STREQ(result.ptr, str.ptr);
    2.81  
    2.82 @@ -205,36 +205,36 @@
    2.83  TEST(String, strcmp) {
    2.84      cxstring str = CX_STR("compare this");
    2.85  
    2.86 -    EXPECT_EQ(cx_strcmp(cx_str(""), cx_str("")), 0);
    2.87 -    EXPECT_GT(cx_strcmp(str, cx_str("")), 0);
    2.88 -    EXPECT_EQ(cx_strcmp(str, cx_str("compare this")), 0);
    2.89 -    EXPECT_NE(cx_strcmp(str, cx_str("Compare This")), 0);
    2.90 -    EXPECT_LT(cx_strcmp(str, cx_str("compare tool")), 0);
    2.91 -    EXPECT_GT(cx_strcmp(str, cx_str("compare shit")), 0);
    2.92 -    EXPECT_LT(cx_strcmp(str, cx_str("compare this not")), 0);
    2.93 -    EXPECT_GT(cx_strcmp(str, cx_str("compare")), 0);
    2.94 +    EXPECT_EQ(cx_strcmp(CX_STR(""), CX_STR("")), 0);
    2.95 +    EXPECT_GT(cx_strcmp(str, CX_STR("")), 0);
    2.96 +    EXPECT_EQ(cx_strcmp(str, CX_STR("compare this")), 0);
    2.97 +    EXPECT_NE(cx_strcmp(str, CX_STR("Compare This")), 0);
    2.98 +    EXPECT_LT(cx_strcmp(str, CX_STR("compare tool")), 0);
    2.99 +    EXPECT_GT(cx_strcmp(str, CX_STR("compare shit")), 0);
   2.100 +    EXPECT_LT(cx_strcmp(str, CX_STR("compare this not")), 0);
   2.101 +    EXPECT_GT(cx_strcmp(str, CX_STR("compare")), 0);
   2.102  
   2.103 -    cxstring str2 = cx_str("Compare This");
   2.104 +    cxstring str2 = CX_STR("Compare This");
   2.105      EXPECT_NE(cx_strcmp_p(&str, &str2), 0);
   2.106 -    str2 = cx_str("compare this");
   2.107 +    str2 = CX_STR("compare this");
   2.108      EXPECT_EQ(cx_strcmp_p(&str, &str2), 0);
   2.109  }
   2.110  
   2.111  TEST(String, strcasecmp) {
   2.112      cxstring str = CX_STR("compare this");
   2.113  
   2.114 -    EXPECT_EQ(cx_strcasecmp(cx_str(""), cx_str("")), 0);
   2.115 -    EXPECT_GT(cx_strcasecmp(str, cx_str("")), 0);
   2.116 -    EXPECT_EQ(cx_strcasecmp(str, cx_str("compare this")), 0);
   2.117 -    EXPECT_EQ(cx_strcasecmp(str, cx_str("Compare This")), 0);
   2.118 -    EXPECT_LT(cx_strcasecmp(str, cx_str("compare tool")), 0);
   2.119 -    EXPECT_GT(cx_strcasecmp(str, cx_str("compare shit")), 0);
   2.120 -    EXPECT_LT(cx_strcasecmp(str, cx_str("compare this not")), 0);
   2.121 -    EXPECT_GT(cx_strcasecmp(str, cx_str("compare")), 0);
   2.122 +    EXPECT_EQ(cx_strcasecmp(CX_STR(""), CX_STR("")), 0);
   2.123 +    EXPECT_GT(cx_strcasecmp(str, CX_STR("")), 0);
   2.124 +    EXPECT_EQ(cx_strcasecmp(str, CX_STR("compare this")), 0);
   2.125 +    EXPECT_EQ(cx_strcasecmp(str, CX_STR("Compare This")), 0);
   2.126 +    EXPECT_LT(cx_strcasecmp(str, CX_STR("compare tool")), 0);
   2.127 +    EXPECT_GT(cx_strcasecmp(str, CX_STR("compare shit")), 0);
   2.128 +    EXPECT_LT(cx_strcasecmp(str, CX_STR("compare this not")), 0);
   2.129 +    EXPECT_GT(cx_strcasecmp(str, CX_STR("compare")), 0);
   2.130  
   2.131 -    cxstring str2 = cx_str("Compare This");
   2.132 +    cxstring str2 = CX_STR("Compare This");
   2.133      EXPECT_EQ(cx_strcasecmp_p(&str, &str2), 0);
   2.134 -    str2 = cx_str("Compare Tool");
   2.135 +    str2 = CX_STR("Compare Tool");
   2.136      EXPECT_LT(cx_strcasecmp_p(&str, &str2), 0);
   2.137  }
   2.138  
   2.139 @@ -247,22 +247,22 @@
   2.140      CxTestingAllocator alloc;
   2.141  
   2.142      cxmutstr t1 = cx_strcat_a(&alloc, 2, s1, s2);
   2.143 -    EXPECT_EQ(cx_strcmp(cx_strcast(t1), cx_str("1234")), 0);
   2.144 +    EXPECT_EQ(cx_strcmp(cx_strcast(t1), CX_STR("1234")), 0);
   2.145      EXPECT_ZERO_TERMINATED(t1);
   2.146      cx_strfree_a(&alloc, &t1);
   2.147  
   2.148      cxmutstr t2 = cx_strcat_a(&alloc, 3, s1, s2, s3);
   2.149 -    EXPECT_EQ(cx_strcmp(cx_strcast(t2), cx_str("123456")), 0);
   2.150 +    EXPECT_EQ(cx_strcmp(cx_strcast(t2), CX_STR("123456")), 0);
   2.151      EXPECT_ZERO_TERMINATED(t2);
   2.152      cx_strfree_a(&alloc, &t2);
   2.153  
   2.154      cxmutstr t3 = cx_strcat_a(&alloc, 6, s1, sn, s2, sn, s3, sn);
   2.155 -    EXPECT_EQ(cx_strcmp(cx_strcast(t3), cx_str("123456")), 0);
   2.156 +    EXPECT_EQ(cx_strcmp(cx_strcast(t3), CX_STR("123456")), 0);
   2.157      EXPECT_ZERO_TERMINATED(t3);
   2.158      cx_strfree_a(&alloc, &t3);
   2.159  
   2.160      cxmutstr t4 = cx_strcat_a(&alloc, 2, sn, sn);
   2.161 -    EXPECT_EQ(cx_strcmp(cx_strcast(t4), cx_str("")), 0);
   2.162 +    EXPECT_EQ(cx_strcmp(cx_strcast(t4), CX_STR("")), 0);
   2.163      EXPECT_ZERO_TERMINATED(t4);
   2.164      cx_strfree_a(&alloc, &t4);
   2.165  
   2.166 @@ -270,221 +270,221 @@
   2.167  
   2.168      // use the macro
   2.169      cxmutstr t5 = cx_strcat(3, s3, s1, s2);
   2.170 -    EXPECT_EQ(cx_strcmp(cx_strcast(t5), cx_str("561234")), 0);
   2.171 +    EXPECT_EQ(cx_strcmp(cx_strcast(t5), CX_STR("561234")), 0);
   2.172      EXPECT_ZERO_TERMINATED(t5);
   2.173      cx_strfree(&t5);
   2.174  }
   2.175  
   2.176  TEST(String, strsplit) {
   2.177  
   2.178 -    cxstring test = cx_str("this,is,a,csv,string");
   2.179 +    cxstring test = CX_STR("this,is,a,csv,string");
   2.180      size_t capa = 8;
   2.181      cxstring list[8];
   2.182      size_t n;
   2.183  
   2.184      // special case: empty string
   2.185 -    n = cx_strsplit(test, cx_str(""), capa, list);
   2.186 +    n = cx_strsplit(test, CX_STR(""), capa, list);
   2.187      ASSERT_EQ(n, 1);
   2.188      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.189  
   2.190      // no delimiter occurrence
   2.191 -    n = cx_strsplit(test, cx_str("z"), capa, list);
   2.192 +    n = cx_strsplit(test, CX_STR("z"), capa, list);
   2.193      ASSERT_EQ(n, 1);
   2.194      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.195  
   2.196      // partially matching delimiter
   2.197 -    n = cx_strsplit(test, cx_str("is,not"), capa, list);
   2.198 +    n = cx_strsplit(test, CX_STR("is,not"), capa, list);
   2.199      ASSERT_EQ(n, 1);
   2.200      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.201  
   2.202      // matching single-char delimiter
   2.203 -    n = cx_strsplit(test, cx_str(","), capa, list);
   2.204 +    n = cx_strsplit(test, CX_STR(","), capa, list);
   2.205      ASSERT_EQ(n, 5);
   2.206 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
   2.207 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
   2.208 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("a")), 0);
   2.209 -    EXPECT_EQ(cx_strcmp(list[3], cx_str("csv")), 0);
   2.210 -    EXPECT_EQ(cx_strcmp(list[4], cx_str("string")), 0);
   2.211 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("this")), 0);
   2.212 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("is")), 0);
   2.213 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("a")), 0);
   2.214 +    EXPECT_EQ(cx_strcmp(list[3], CX_STR("csv")), 0);
   2.215 +    EXPECT_EQ(cx_strcmp(list[4], CX_STR("string")), 0);
   2.216  
   2.217      // matching multi-char delimiter
   2.218 -    n = cx_strsplit(test, cx_str("is"), capa, list);
   2.219 +    n = cx_strsplit(test, CX_STR("is"), capa, list);
   2.220      ASSERT_EQ(n, 3);
   2.221 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
   2.222 -    EXPECT_EQ(cx_strcmp(list[1], cx_str(",")), 0);
   2.223 -    EXPECT_EQ(cx_strcmp(list[2], cx_str(",a,csv,string")), 0);
   2.224 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("th")), 0);
   2.225 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR(",")), 0);
   2.226 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR(",a,csv,string")), 0);
   2.227  
   2.228      // bounded list using single-char delimiter
   2.229 -    n = cx_strsplit(test, cx_str(","), 3, list);
   2.230 +    n = cx_strsplit(test, CX_STR(","), 3, list);
   2.231      ASSERT_EQ(n, 3);
   2.232 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
   2.233 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
   2.234 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
   2.235 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("this")), 0);
   2.236 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("is")), 0);
   2.237 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("a,csv,string")), 0);
   2.238  
   2.239      // bounded list using multi-char delimiter
   2.240 -    n = cx_strsplit(test, cx_str("is"), 2, list);
   2.241 +    n = cx_strsplit(test, CX_STR("is"), 2, list);
   2.242      ASSERT_EQ(n, 2);
   2.243 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
   2.244 -    EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
   2.245 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("th")), 0);
   2.246 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR(",is,a,csv,string")), 0);
   2.247  
   2.248      // start with delimiter
   2.249 -    n = cx_strsplit(test, cx_str("this"), capa, list);
   2.250 +    n = cx_strsplit(test, CX_STR("this"), capa, list);
   2.251      ASSERT_EQ(n, 2);
   2.252 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
   2.253 -    EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
   2.254 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("")), 0);
   2.255 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR(",is,a,csv,string")), 0);
   2.256  
   2.257      // end with delimiter
   2.258 -    n = cx_strsplit(test, cx_str("string"), capa, list);
   2.259 +    n = cx_strsplit(test, CX_STR("string"), capa, list);
   2.260      ASSERT_EQ(n, 2);
   2.261 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("this,is,a,csv,")), 0);
   2.262 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
   2.263 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("this,is,a,csv,")), 0);
   2.264 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("")), 0);
   2.265  
   2.266  
   2.267      // end with delimiter exceed bound
   2.268 -    n = cx_strsplit(cx_str("a,b,c,"), cx_str(","), 3, list);
   2.269 +    n = cx_strsplit(CX_STR("a,b,c,"), CX_STR(","), 3, list);
   2.270      ASSERT_EQ(n, 3);
   2.271 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("a")), 0);
   2.272 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("b")), 0);
   2.273 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("c,")), 0);
   2.274 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("a")), 0);
   2.275 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("b")), 0);
   2.276 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("c,")), 0);
   2.277  
   2.278      // exact match
   2.279 -    n = cx_strsplit(test, cx_str("this,is,a,csv,string"), capa, list);
   2.280 +    n = cx_strsplit(test, CX_STR("this,is,a,csv,string"), capa, list);
   2.281      ASSERT_EQ(n, 2);
   2.282 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
   2.283 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
   2.284 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("")), 0);
   2.285 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("")), 0);
   2.286  
   2.287      // string to be split is only substring
   2.288 -    n = cx_strsplit(test, cx_str("this,is,a,csv,string,with,extension"), capa, list);
   2.289 +    n = cx_strsplit(test, CX_STR("this,is,a,csv,string,with,extension"), capa, list);
   2.290      ASSERT_EQ(n, 1);
   2.291      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.292  
   2.293      // subsequent encounter of delimiter (the string between is empty)
   2.294 -    n = cx_strsplit(test, cx_str("is,"), capa, list);
   2.295 +    n = cx_strsplit(test, CX_STR("is,"), capa, list);
   2.296      ASSERT_EQ(n, 3);
   2.297 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
   2.298 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
   2.299 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
   2.300 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("th")), 0);
   2.301 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("")), 0);
   2.302 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("a,csv,string")), 0);
   2.303  
   2.304      // call the _m variant just for coverage
   2.305      auto mtest = cx_strdup(test);
   2.306      cxmutstr mlist[4];
   2.307 -    n = cx_strsplit_m(mtest, cx_str("is,"), 4, mlist);
   2.308 +    n = cx_strsplit_m(mtest, CX_STR("is,"), 4, mlist);
   2.309      ASSERT_EQ(n, 3);
   2.310 -    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), cx_str("th")), 0);
   2.311 -    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), cx_str("")), 0);
   2.312 -    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), cx_str("a,csv,string")), 0);
   2.313 +    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), CX_STR("th")), 0);
   2.314 +    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), CX_STR("")), 0);
   2.315 +    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), CX_STR("a,csv,string")), 0);
   2.316      cx_strfree(&mtest);
   2.317  }
   2.318  
   2.319  TEST(String, strsplit_a) {
   2.320      CxTestingAllocator alloc;
   2.321  
   2.322 -    cxstring test = cx_str("this,is,a,csv,string");
   2.323 +    cxstring test = CX_STR("this,is,a,csv,string");
   2.324      size_t capa = 8;
   2.325      cxstring *list;
   2.326      size_t n;
   2.327  
   2.328      // special case: empty string
   2.329 -    n = cx_strsplit_a(&alloc, test, cx_str(""), capa, &list);
   2.330 +    n = cx_strsplit_a(&alloc, test, CX_STR(""), capa, &list);
   2.331      ASSERT_EQ(n, 1);
   2.332      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.333      cxFree(&alloc, list);
   2.334  
   2.335      // no delimiter occurrence
   2.336 -    n = cx_strsplit_a(&alloc, test, cx_str("z"), capa, &list);
   2.337 +    n = cx_strsplit_a(&alloc, test, CX_STR("z"), capa, &list);
   2.338      ASSERT_EQ(n, 1);
   2.339      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.340      cxFree(&alloc, list);
   2.341  
   2.342      // partially matching delimiter
   2.343 -    n = cx_strsplit_a(&alloc, test, cx_str("is,not"), capa, &list);
   2.344 +    n = cx_strsplit_a(&alloc, test, CX_STR("is,not"), capa, &list);
   2.345      ASSERT_EQ(n, 1);
   2.346      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.347      cxFree(&alloc, list);
   2.348  
   2.349      // matching single-char delimiter
   2.350 -    n = cx_strsplit_a(&alloc, test, cx_str(","), capa, &list);
   2.351 +    n = cx_strsplit_a(&alloc, test, CX_STR(","), capa, &list);
   2.352      ASSERT_EQ(n, 5);
   2.353 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
   2.354 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
   2.355 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("a")), 0);
   2.356 -    EXPECT_EQ(cx_strcmp(list[3], cx_str("csv")), 0);
   2.357 -    EXPECT_EQ(cx_strcmp(list[4], cx_str("string")), 0);
   2.358 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("this")), 0);
   2.359 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("is")), 0);
   2.360 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("a")), 0);
   2.361 +    EXPECT_EQ(cx_strcmp(list[3], CX_STR("csv")), 0);
   2.362 +    EXPECT_EQ(cx_strcmp(list[4], CX_STR("string")), 0);
   2.363      cxFree(&alloc, list);
   2.364  
   2.365      // matching multi-char delimiter
   2.366 -    n = cx_strsplit_a(&alloc, test, cx_str("is"), capa, &list);
   2.367 +    n = cx_strsplit_a(&alloc, test, CX_STR("is"), capa, &list);
   2.368      ASSERT_EQ(n, 3);
   2.369 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
   2.370 -    EXPECT_EQ(cx_strcmp(list[1], cx_str(",")), 0);
   2.371 -    EXPECT_EQ(cx_strcmp(list[2], cx_str(",a,csv,string")), 0);
   2.372 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("th")), 0);
   2.373 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR(",")), 0);
   2.374 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR(",a,csv,string")), 0);
   2.375      cxFree(&alloc, list);
   2.376  
   2.377      // bounded list using single-char delimiter
   2.378 -    n = cx_strsplit_a(&alloc, test, cx_str(","), 3, &list);
   2.379 +    n = cx_strsplit_a(&alloc, test, CX_STR(","), 3, &list);
   2.380      ASSERT_EQ(n, 3);
   2.381 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
   2.382 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
   2.383 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
   2.384 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("this")), 0);
   2.385 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("is")), 0);
   2.386 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("a,csv,string")), 0);
   2.387      cxFree(&alloc, list);
   2.388  
   2.389      // bounded list using multi-char delimiter
   2.390 -    n = cx_strsplit_a(&alloc, test, cx_str("is"), 2, &list);
   2.391 +    n = cx_strsplit_a(&alloc, test, CX_STR("is"), 2, &list);
   2.392      ASSERT_EQ(n, 2);
   2.393 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
   2.394 -    EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
   2.395 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("th")), 0);
   2.396 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR(",is,a,csv,string")), 0);
   2.397      cxFree(&alloc, list);
   2.398  
   2.399      // start with delimiter
   2.400 -    n = cx_strsplit_a(&alloc, test, cx_str("this"), capa, &list);
   2.401 +    n = cx_strsplit_a(&alloc, test, CX_STR("this"), capa, &list);
   2.402      ASSERT_EQ(n, 2);
   2.403 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
   2.404 -    EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
   2.405 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("")), 0);
   2.406 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR(",is,a,csv,string")), 0);
   2.407      cxFree(&alloc, list);
   2.408  
   2.409      // end with delimiter
   2.410 -    n = cx_strsplit_a(&alloc, test, cx_str("string"), capa, &list);
   2.411 +    n = cx_strsplit_a(&alloc, test, CX_STR("string"), capa, &list);
   2.412      ASSERT_EQ(n, 2);
   2.413 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("this,is,a,csv,")), 0);
   2.414 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
   2.415 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("this,is,a,csv,")), 0);
   2.416 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("")), 0);
   2.417      cxFree(&alloc, list);
   2.418  
   2.419      // end with delimiter exceed bound
   2.420 -    n = cx_strsplit_a(&alloc, cx_str("a,b,c,"), cx_str(","), 3, &list);
   2.421 +    n = cx_strsplit_a(&alloc, CX_STR("a,b,c,"), CX_STR(","), 3, &list);
   2.422      ASSERT_EQ(n, 3);
   2.423 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("a")), 0);
   2.424 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("b")), 0);
   2.425 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("c,")), 0);
   2.426 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("a")), 0);
   2.427 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("b")), 0);
   2.428 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("c,")), 0);
   2.429      cxFree(&alloc, list);
   2.430  
   2.431      // exact match
   2.432 -    n = cx_strsplit_a(&alloc, test, cx_str("this,is,a,csv,string"), capa, &list);
   2.433 +    n = cx_strsplit_a(&alloc, test, CX_STR("this,is,a,csv,string"), capa, &list);
   2.434      ASSERT_EQ(n, 2);
   2.435 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
   2.436 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
   2.437 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("")), 0);
   2.438 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("")), 0);
   2.439      cxFree(&alloc, list);
   2.440  
   2.441      // string to be split is only substring
   2.442 -    n = cx_strsplit_a(&alloc, test, cx_str("this,is,a,csv,string,with,extension"), capa, &list);
   2.443 +    n = cx_strsplit_a(&alloc, test, CX_STR("this,is,a,csv,string,with,extension"), capa, &list);
   2.444      ASSERT_EQ(n, 1);
   2.445      EXPECT_EQ(cx_strcmp(list[0], test), 0);
   2.446      cxFree(&alloc, list);
   2.447  
   2.448      // subsequent encounter of delimiter (the string between is empty)
   2.449 -    n = cx_strsplit_a(&alloc, test, cx_str("is,"), capa, &list);
   2.450 +    n = cx_strsplit_a(&alloc, test, CX_STR("is,"), capa, &list);
   2.451      ASSERT_EQ(n, 3);
   2.452 -    EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
   2.453 -    EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
   2.454 -    EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
   2.455 +    EXPECT_EQ(cx_strcmp(list[0], CX_STR("th")), 0);
   2.456 +    EXPECT_EQ(cx_strcmp(list[1], CX_STR("")), 0);
   2.457 +    EXPECT_EQ(cx_strcmp(list[2], CX_STR("a,csv,string")), 0);
   2.458      cxFree(&alloc, list);
   2.459  
   2.460      // call the _m variant just for coverage
   2.461      auto mtest = cx_strdup(test);
   2.462      cxmutstr *mlist;
   2.463 -    n = cx_strsplit_ma(&alloc, mtest, cx_str("is,"), 4, &mlist);
   2.464 +    n = cx_strsplit_ma(&alloc, mtest, CX_STR("is,"), 4, &mlist);
   2.465      ASSERT_EQ(n, 3);
   2.466 -    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), cx_str("th")), 0);
   2.467 -    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), cx_str("")), 0);
   2.468 -    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), cx_str("a,csv,string")), 0);
   2.469 +    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), CX_STR("th")), 0);
   2.470 +    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), CX_STR("")), 0);
   2.471 +    EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), CX_STR("a,csv,string")), 0);
   2.472      cxFree(&alloc, mlist);
   2.473      cx_strfree(&mtest);
   2.474  
   2.475 @@ -492,63 +492,63 @@
   2.476  }
   2.477  
   2.478  TEST(String, strtrim) {
   2.479 -    cxstring t1 = cx_strtrim(cx_str("  ein test  \t "));
   2.480 -    cxstring t2 = cx_strtrim(cx_str("abc"));
   2.481 -    cxstring t3 = cx_strtrim(cx_str(" 123"));
   2.482 -    cxstring t4 = cx_strtrim(cx_str("xyz "));
   2.483 -    cxstring t5 = cx_strtrim(cx_str("   "));
   2.484 -    cxstring empty = cx_strtrim(cx_str(""));
   2.485 +    cxstring t1 = cx_strtrim(CX_STR("  ein test  \t "));
   2.486 +    cxstring t2 = cx_strtrim(CX_STR("abc"));
   2.487 +    cxstring t3 = cx_strtrim(CX_STR(" 123"));
   2.488 +    cxstring t4 = cx_strtrim(CX_STR("xyz "));
   2.489 +    cxstring t5 = cx_strtrim(CX_STR("   "));
   2.490 +    cxstring empty = cx_strtrim(CX_STR(""));
   2.491  
   2.492 -    EXPECT_EQ(cx_strcmp(t1, cx_str("ein test")), 0);
   2.493 -    EXPECT_EQ(cx_strcmp(t2, cx_str("abc")), 0);
   2.494 -    EXPECT_EQ(cx_strcmp(t3, cx_str("123")), 0);
   2.495 -    EXPECT_EQ(cx_strcmp(t4, cx_str("xyz")), 0);
   2.496 -    EXPECT_EQ(cx_strcmp(t5, cx_str("")), 0);
   2.497 -    EXPECT_EQ(cx_strcmp(empty, cx_str("")), 0);
   2.498 +    EXPECT_EQ(cx_strcmp(t1, CX_STR("ein test")), 0);
   2.499 +    EXPECT_EQ(cx_strcmp(t2, CX_STR("abc")), 0);
   2.500 +    EXPECT_EQ(cx_strcmp(t3, CX_STR("123")), 0);
   2.501 +    EXPECT_EQ(cx_strcmp(t4, CX_STR("xyz")), 0);
   2.502 +    EXPECT_EQ(cx_strcmp(t5, CX_STR("")), 0);
   2.503 +    EXPECT_EQ(cx_strcmp(empty, CX_STR("")), 0);
   2.504  
   2.505      // call the _m variant just for coverage
   2.506      cxmutstr m1 = cx_strtrim_m(cx_mutstr((char *) "  ein test  \t "));
   2.507 -    EXPECT_EQ(cx_strcmp(cx_strcast(m1), cx_str("ein test")), 0);
   2.508 +    EXPECT_EQ(cx_strcmp(cx_strcast(m1), CX_STR("ein test")), 0);
   2.509  }
   2.510  
   2.511  TEST(String, strprefix) {
   2.512      cxstring str = CX_STR("test my prefix and my suffix");
   2.513      cxstring empty = CX_STR("");
   2.514 -    EXPECT_FALSE(cx_strprefix(empty, cx_str("pref")));
   2.515 +    EXPECT_FALSE(cx_strprefix(empty, CX_STR("pref")));
   2.516      EXPECT_TRUE(cx_strprefix(str, empty));
   2.517      EXPECT_TRUE(cx_strprefix(empty, empty));
   2.518 -    EXPECT_TRUE(cx_strprefix(str, cx_str("test ")));
   2.519 -    EXPECT_FALSE(cx_strprefix(str, cx_str("8-) fsck ")));
   2.520 +    EXPECT_TRUE(cx_strprefix(str, CX_STR("test ")));
   2.521 +    EXPECT_FALSE(cx_strprefix(str, CX_STR("8-) fsck ")));
   2.522  }
   2.523  
   2.524  TEST(String, strsuffix) {
   2.525      cxstring str = CX_STR("test my prefix and my suffix");
   2.526      cxstring empty = CX_STR("");
   2.527 -    EXPECT_FALSE(cx_strsuffix(empty, cx_str("suf")));
   2.528 +    EXPECT_FALSE(cx_strsuffix(empty, CX_STR("suf")));
   2.529      EXPECT_TRUE(cx_strsuffix(str, empty));
   2.530      EXPECT_TRUE(cx_strsuffix(empty, empty));
   2.531 -    EXPECT_TRUE(cx_strsuffix(str, cx_str("fix")));
   2.532 -    EXPECT_FALSE(cx_strsuffix(str, cx_str("fox")));
   2.533 +    EXPECT_TRUE(cx_strsuffix(str, CX_STR("fix")));
   2.534 +    EXPECT_FALSE(cx_strsuffix(str, CX_STR("fox")));
   2.535  }
   2.536  
   2.537  TEST(String, strcaseprefix) {
   2.538      cxstring str = CX_STR("test my prefix and my suffix");
   2.539      cxstring empty = CX_STR("");
   2.540 -    EXPECT_FALSE(cx_strcaseprefix(empty, cx_str("pREf")));
   2.541 +    EXPECT_FALSE(cx_strcaseprefix(empty, CX_STR("pREf")));
   2.542      EXPECT_TRUE(cx_strcaseprefix(str, empty));
   2.543      EXPECT_TRUE(cx_strcaseprefix(empty, empty));
   2.544 -    EXPECT_TRUE(cx_strcaseprefix(str, cx_str("TEST ")));
   2.545 -    EXPECT_FALSE(cx_strcaseprefix(str, cx_str("8-) fsck ")));
   2.546 +    EXPECT_TRUE(cx_strcaseprefix(str, CX_STR("TEST ")));
   2.547 +    EXPECT_FALSE(cx_strcaseprefix(str, CX_STR("8-) fsck ")));
   2.548  }
   2.549  
   2.550  TEST(String, strcasesuffix) {
   2.551      cxstring str = CX_STR("test my prefix and my suffix");
   2.552      cxstring empty = CX_STR("");
   2.553 -    EXPECT_FALSE(cx_strcasesuffix(empty, cx_str("sUf")));
   2.554 +    EXPECT_FALSE(cx_strcasesuffix(empty, CX_STR("sUf")));
   2.555      EXPECT_TRUE(cx_strcasesuffix(str, empty));
   2.556      EXPECT_TRUE(cx_strcasesuffix(empty, empty));
   2.557 -    EXPECT_TRUE(cx_strcasesuffix(str, cx_str("FIX")));
   2.558 -    EXPECT_FALSE(cx_strcasesuffix(str, cx_str("fox")));
   2.559 +    EXPECT_TRUE(cx_strcasesuffix(str, CX_STR("FIX")));
   2.560 +    EXPECT_FALSE(cx_strcasesuffix(str, CX_STR("fox")));
   2.561  }
   2.562  
   2.563  TEST(String, strreplace) {
   2.564 @@ -561,44 +561,44 @@
   2.565      cxstring astr = CX_STR("aaaaaaaaaa");
   2.566      cxstring csstr = CX_STR("test AB ab TEST xyz");
   2.567  
   2.568 -    cxmutstr repl = cx_strreplace(str, cx_str("abab"), cx_str("muchlonger"));
   2.569 +    cxmutstr repl = cx_strreplace(str, CX_STR("abab"), CX_STR("muchlonger"));
   2.570      auto expected = "test muchlongerab string aba";
   2.571  
   2.572 -    cxmutstr repln = cx_strreplacen(str, cx_str("ab"), cx_str("c"), 2);
   2.573 +    cxmutstr repln = cx_strreplacen(str, CX_STR("ab"), CX_STR("c"), 2);
   2.574      auto expectedn = "test ccab string aba";
   2.575  
   2.576 -    cxmutstr longrepl = cx_strreplace(longstr, cx_str("a"), cx_str("z"));
   2.577 +    cxmutstr longrepl = cx_strreplace(longstr, CX_STR("a"), CX_STR("z"));
   2.578      auto longexpect = "xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd";
   2.579  
   2.580 -    cxmutstr replnotrail = cx_strreplace(notrail, cx_str("ab"), cx_str("z"));
   2.581 +    cxmutstr replnotrail = cx_strreplace(notrail, CX_STR("ab"), CX_STR("z"));
   2.582      auto notrailexpect = "test zz";
   2.583  
   2.584 -    cxmutstr repleq = cx_strreplace(str, str, cx_str("hello"));
   2.585 +    cxmutstr repleq = cx_strreplace(str, str, CX_STR("hello"));
   2.586      auto eqexpect = "hello";
   2.587  
   2.588 -    cxmutstr replempty1 = cx_strreplace(empty, cx_str("ab"), cx_str("c")); // expect: empty
   2.589 -    cxmutstr replempty2 = cx_strreplace(str, cx_str("abab"), empty);
   2.590 +    cxmutstr replempty1 = cx_strreplace(empty, CX_STR("ab"), CX_STR("c")); // expect: empty
   2.591 +    cxmutstr replempty2 = cx_strreplace(str, CX_STR("abab"), empty);
   2.592      auto emptyexpect2 = "test ab string aba";
   2.593  
   2.594 -    cxmutstr replpre = cx_strreplace(str, cx_str("test "), cx_str("TEST "));
   2.595 +    cxmutstr replpre = cx_strreplace(str, CX_STR("test "), CX_STR("TEST "));
   2.596      auto preexpected = "TEST ababab string aba";
   2.597  
   2.598 -    cxmutstr replan1 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 1);
   2.599 +    cxmutstr replan1 = cx_strreplacen(astr, CX_STR("a"), CX_STR("x"), 1);
   2.600      auto an1expected = "xaaaaaaaaa";
   2.601  
   2.602 -    cxmutstr replan4 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 4);
   2.603 +    cxmutstr replan4 = cx_strreplacen(astr, CX_STR("a"), CX_STR("x"), 4);
   2.604      auto an4expected = "xxxxaaaaaa";
   2.605  
   2.606 -    cxmutstr replan9 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 9);
   2.607 +    cxmutstr replan9 = cx_strreplacen(astr, CX_STR("a"), CX_STR("x"), 9);
   2.608      auto an9expected = "xxxxxxxxxa";
   2.609  
   2.610 -    cxmutstr replan10 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 10);
   2.611 +    cxmutstr replan10 = cx_strreplacen(astr, CX_STR("a"), CX_STR("x"), 10);
   2.612      auto an10expected = "xxxxxxxxxx";
   2.613  
   2.614 -    cxmutstr repl1_a = cx_strreplace_a(&alloc, csstr, cx_str("AB"), cx_str("*"));
   2.615 +    cxmutstr repl1_a = cx_strreplace_a(&alloc, csstr, CX_STR("AB"), CX_STR("*"));
   2.616      auto expeced1_a = "test * ab TEST xyz";
   2.617  
   2.618 -    cxmutstr repl2_a = cx_strreplace_a(&alloc, csstr, cx_str("test"), cx_str("TEST"));
   2.619 +    cxmutstr repl2_a = cx_strreplace_a(&alloc, csstr, CX_STR("test"), CX_STR("TEST"));
   2.620      auto expected2_a = "TEST AB ab TEST xyz";
   2.621  
   2.622  
   2.623 @@ -651,22 +651,22 @@
   2.624  }
   2.625  
   2.626  TEST(String, strupper) {
   2.627 -    cxmutstr str = cx_strdup(cx_str("thIs 1s @ Te$t"));
   2.628 +    cxmutstr str = cx_strdup(CX_STR("thIs 1s @ Te$t"));
   2.629      cx_strupper(str);
   2.630      EXPECT_STREQ(str.ptr, "THIS 1S @ TE$T");
   2.631      cx_strfree(&str);
   2.632  }
   2.633  
   2.634  TEST(String, strlower) {
   2.635 -    cxmutstr str = cx_strdup(cx_str("thIs 1s @ Te$t"));
   2.636 +    cxmutstr str = cx_strdup(CX_STR("thIs 1s @ Te$t"));
   2.637      cx_strlower(str);
   2.638      EXPECT_STREQ(str.ptr, "this 1s @ te$t");
   2.639      cx_strfree(&str);
   2.640  }
   2.641  
   2.642  TEST(String, strtok) {
   2.643 -    cxstring str = cx_str("a,comma,separated,string");
   2.644 -    cxstring delim = cx_str(",");
   2.645 +    cxstring str = CX_STR("a,comma,separated,string");
   2.646 +    cxstring delim = CX_STR(",");
   2.647      CxStrtokCtx ctx = cx_strtok(str, delim, 3);
   2.648      EXPECT_EQ(ctx.str.ptr, str.ptr);
   2.649      EXPECT_EQ(ctx.str.length, str.length);
   2.650 @@ -681,8 +681,8 @@
   2.651  }
   2.652  
   2.653  TEST(String, strtok_m) {
   2.654 -    cxmutstr str = cx_strdup(cx_str("a,comma,separated,string"));
   2.655 -    cxstring delim = cx_str(",");
   2.656 +    cxmutstr str = cx_strdup(CX_STR("a,comma,separated,string"));
   2.657 +    cxstring delim = CX_STR(",");
   2.658      CxStrtokCtx ctx = cx_strtok_m(str, delim, 3);
   2.659      EXPECT_EQ(ctx.str.ptr, str.ptr);
   2.660      EXPECT_EQ(ctx.str.length, str.length);
   2.661 @@ -698,8 +698,8 @@
   2.662  }
   2.663  
   2.664  TEST(String, strtok_delim) {
   2.665 -    cxstring str = cx_str("an,arbitrarily|separated;string");
   2.666 -    cxstring delim = cx_str(",");
   2.667 +    cxstring str = CX_STR("an,arbitrarily|separated;string");
   2.668 +    cxstring delim = CX_STR(",");
   2.669      cxstring delim_more[2] = {CX_STR("|"), CX_STR(";")};
   2.670      CxStrtokCtx ctx = cx_strtok(str, delim, 3);
   2.671      cx_strtok_delim(&ctx, delim_more, 2);
   2.672 @@ -716,15 +716,15 @@
   2.673  }
   2.674  
   2.675  TEST(String, strtok_next_easy) {
   2.676 -    cxstring str = cx_str("a,comma,separated,string");
   2.677 -    cxstring delim = cx_str(",");
   2.678 +    cxstring str = CX_STR("a,comma,separated,string");
   2.679 +    cxstring delim = CX_STR(",");
   2.680      CxStrtokCtx ctx = cx_strtok(str, delim, 3);
   2.681      bool ret;
   2.682      cxstring tok;
   2.683  
   2.684      ret = cx_strtok_next(&ctx, &tok);
   2.685      ASSERT_TRUE(ret);
   2.686 -    EXPECT_EQ(cx_strcmp(tok, cx_str("a")), 0);
   2.687 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("a")), 0);
   2.688      EXPECT_EQ(ctx.pos, 0);
   2.689      EXPECT_EQ(ctx.next_pos, 2);
   2.690      EXPECT_EQ(ctx.delim_pos, 1);
   2.691 @@ -732,7 +732,7 @@
   2.692  
   2.693      ret = cx_strtok_next(&ctx, &tok);
   2.694      ASSERT_TRUE(ret);
   2.695 -    EXPECT_EQ(cx_strcmp(tok, cx_str("comma")), 0);
   2.696 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("comma")), 0);
   2.697      EXPECT_EQ(ctx.pos, 2);
   2.698      EXPECT_EQ(ctx.next_pos, 8);
   2.699      EXPECT_EQ(ctx.delim_pos, 7);
   2.700 @@ -740,7 +740,7 @@
   2.701  
   2.702      ret = cx_strtok_next(&ctx, &tok);
   2.703      ASSERT_TRUE(ret);
   2.704 -    EXPECT_EQ(cx_strcmp(tok, cx_str("separated")), 0);
   2.705 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("separated")), 0);
   2.706      EXPECT_EQ(ctx.pos, 8);
   2.707      EXPECT_EQ(ctx.next_pos, 18);
   2.708      EXPECT_EQ(ctx.delim_pos, 17);
   2.709 @@ -755,15 +755,15 @@
   2.710  }
   2.711  
   2.712  TEST(String, strtok_next_unlimited) {
   2.713 -    cxstring str = cx_str("some;-;otherwise;-;separated;-;string;-;");
   2.714 -    cxstring delim = cx_str(";-;");
   2.715 +    cxstring str = CX_STR("some;-;otherwise;-;separated;-;string;-;");
   2.716 +    cxstring delim = CX_STR(";-;");
   2.717      CxStrtokCtx ctx = cx_strtok(str, delim, SIZE_MAX);
   2.718      bool ret;
   2.719      cxstring tok;
   2.720  
   2.721      ret = cx_strtok_next(&ctx, &tok);
   2.722      ASSERT_TRUE(ret);
   2.723 -    EXPECT_EQ(cx_strcmp(tok, cx_str("some")), 0);
   2.724 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("some")), 0);
   2.725      EXPECT_EQ(ctx.pos, 0);
   2.726      EXPECT_EQ(ctx.next_pos, 7);
   2.727      EXPECT_EQ(ctx.delim_pos, 4);
   2.728 @@ -771,7 +771,7 @@
   2.729  
   2.730      ret = cx_strtok_next(&ctx, &tok);
   2.731      ASSERT_TRUE(ret);
   2.732 -    EXPECT_EQ(cx_strcmp(tok, cx_str("otherwise")), 0);
   2.733 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("otherwise")), 0);
   2.734      EXPECT_EQ(ctx.pos, 7);
   2.735      EXPECT_EQ(ctx.next_pos, 19);
   2.736      EXPECT_EQ(ctx.delim_pos, 16);
   2.737 @@ -779,7 +779,7 @@
   2.738  
   2.739      ret = cx_strtok_next(&ctx, &tok);
   2.740      ASSERT_TRUE(ret);
   2.741 -    EXPECT_EQ(cx_strcmp(tok, cx_str("separated")), 0);
   2.742 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("separated")), 0);
   2.743      EXPECT_EQ(ctx.pos, 19);
   2.744      EXPECT_EQ(ctx.next_pos, 31);
   2.745      EXPECT_EQ(ctx.delim_pos, 28);
   2.746 @@ -787,7 +787,7 @@
   2.747  
   2.748      ret = cx_strtok_next(&ctx, &tok);
   2.749      ASSERT_TRUE(ret);
   2.750 -    EXPECT_EQ(cx_strcmp(tok, cx_str("string")), 0);
   2.751 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("string")), 0);
   2.752      EXPECT_EQ(ctx.pos, 31);
   2.753      EXPECT_EQ(ctx.next_pos, 40);
   2.754      EXPECT_EQ(ctx.delim_pos, 37);
   2.755 @@ -795,7 +795,7 @@
   2.756  
   2.757      ret = cx_strtok_next(&ctx, &tok);
   2.758      ASSERT_TRUE(ret);
   2.759 -    EXPECT_EQ(cx_strcmp(tok, cx_str("")), 0);
   2.760 +    EXPECT_EQ(cx_strcmp(tok, CX_STR("")), 0);
   2.761      EXPECT_EQ(ctx.pos, 40);
   2.762      EXPECT_EQ(ctx.next_pos, 40);
   2.763      EXPECT_EQ(ctx.delim_pos, 40);
   2.764 @@ -809,8 +809,8 @@
   2.765  }
   2.766  
   2.767  TEST(String, strtok_next_advanced) {
   2.768 -    cxmutstr str = cx_strdup(cx_str("an,arbitrarily;||separated;string"));
   2.769 -    cxstring delim = cx_str(",");
   2.770 +    cxmutstr str = cx_strdup(CX_STR("an,arbitrarily;||separated;string"));
   2.771 +    cxstring delim = CX_STR(",");
   2.772      cxstring delim_more[2] = {CX_STR("||"), CX_STR(";")};
   2.773      CxStrtokCtx ctx = cx_strtok_m(str, delim, 10);
   2.774      cx_strtok_delim(&ctx, delim_more, 2);
   2.775 @@ -819,7 +819,7 @@
   2.776  
   2.777      ret = cx_strtok_next_m(&ctx, &tok);
   2.778      ASSERT_TRUE(ret);
   2.779 -    EXPECT_EQ(cx_strcmp(cx_strcast(tok), cx_str("an")), 0);
   2.780 +    EXPECT_EQ(cx_strcmp(cx_strcast(tok), CX_STR("an")), 0);
   2.781      EXPECT_EQ(ctx.pos, 0);
   2.782      EXPECT_EQ(ctx.next_pos, 3);
   2.783      EXPECT_EQ(ctx.delim_pos, 2);
   2.784 @@ -828,7 +828,7 @@
   2.785  
   2.786      ret = cx_strtok_next_m(&ctx, &tok);
   2.787      ASSERT_TRUE(ret);
   2.788 -    EXPECT_EQ(cx_strcmp(cx_strcast(tok), cx_str("arbitrarily")), 0);
   2.789 +    EXPECT_EQ(cx_strcmp(cx_strcast(tok), CX_STR("arbitrarily")), 0);
   2.790      EXPECT_EQ(ctx.pos, 3);
   2.791      EXPECT_EQ(ctx.next_pos, 15);
   2.792      EXPECT_EQ(ctx.delim_pos, 14);
   2.793 @@ -837,7 +837,7 @@
   2.794  
   2.795      ret = cx_strtok_next_m(&ctx, &tok);
   2.796      ASSERT_TRUE(ret);
   2.797 -    EXPECT_EQ(cx_strcmp(cx_strcast(tok), cx_str("")), 0);
   2.798 +    EXPECT_EQ(cx_strcmp(cx_strcast(tok), CX_STR("")), 0);
   2.799      EXPECT_EQ(ctx.pos, 15);
   2.800      EXPECT_EQ(ctx.next_pos, 17);
   2.801      EXPECT_EQ(ctx.delim_pos, 15);
   2.802 @@ -846,7 +846,7 @@
   2.803  
   2.804      ret = cx_strtok_next_m(&ctx, &tok);
   2.805      ASSERT_TRUE(ret);
   2.806 -    EXPECT_EQ(cx_strcmp(cx_strcast(tok), cx_str("separated")), 0);
   2.807 +    EXPECT_EQ(cx_strcmp(cx_strcast(tok), CX_STR("separated")), 0);
   2.808      EXPECT_EQ(ctx.pos, 17);
   2.809      EXPECT_EQ(ctx.next_pos, 27);
   2.810      EXPECT_EQ(ctx.delim_pos, 26);
   2.811 @@ -855,7 +855,7 @@
   2.812  
   2.813      ret = cx_strtok_next_m(&ctx, &tok);
   2.814      ASSERT_TRUE(ret);
   2.815 -    EXPECT_EQ(cx_strcmp(cx_strcast(tok), cx_str("string")), 0);
   2.816 +    EXPECT_EQ(cx_strcmp(cx_strcast(tok), CX_STR("string")), 0);
   2.817      EXPECT_EQ(ctx.pos, 27);
   2.818      EXPECT_EQ(ctx.next_pos, 33);
   2.819      EXPECT_EQ(ctx.delim_pos, 33);
   2.820 @@ -869,7 +869,7 @@
   2.821      EXPECT_EQ(ctx.delim_pos, 33);
   2.822      EXPECT_EQ(ctx.found, 5);
   2.823  
   2.824 -    EXPECT_EQ(cx_strcmp(cx_strcast(str), cx_str("AN,ARBITRARILY;||SEPARATED;STRING")), 0);
   2.825 +    EXPECT_EQ(cx_strcmp(cx_strcast(str), CX_STR("AN,ARBITRARILY;||SEPARATED;STRING")), 0);
   2.826  
   2.827      cx_strfree(&str);
   2.828  }

mercurial