test/test_string.cpp

Sun, 20 Nov 2022 17:48:42 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 20 Nov 2022 17:48:42 +0100
changeset 627
cc8cbabd27cd
parent 598
70b7456b5b12
child 628
1e2be40f0cb5
permissions
-rw-r--r--

fix cx_array_copy() unintentionally shrinking the array

583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "cx/string.h"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 #include "util_allocator.h"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 #include <gtest/gtest.h>
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
34 #define EXPECT_ZERO_TERMINATED(str) EXPECT_EQ((str).ptr[(str).length], '\0')
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
35
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 TEST(String, construct) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 cxstring s1 = cx_str("1234");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 cxstring s2 = cx_strn("abcd", 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 cxmutstr s3 = cx_mutstr((char *) "1234");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 cxmutstr s4 = cx_mutstrn((char *) "abcd", 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 EXPECT_EQ(s1.length, 4);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 EXPECT_EQ(s2.length, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 EXPECT_EQ(s3.length, 4);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 EXPECT_EQ(s4.length, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48 TEST(String, strfree) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 CxTestingAllocator alloc;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 auto test = (char *) cxMalloc(&alloc, 16);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 cxmutstr str = cx_mutstrn(test, 16);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 ASSERT_EQ(str.ptr, test);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 EXPECT_EQ(str.length, 16);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 cx_strfree_a(&alloc, &str);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 EXPECT_EQ(str.ptr, nullptr);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 EXPECT_EQ(str.length, 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 EXPECT_TRUE(alloc.verify());
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
60 TEST(String, strdup) {
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
61 cxstring str = CX_STR("test");
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
62 cxmutstr dup = cx_strdup(str);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
63 ASSERT_EQ(dup.length, str.length);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
64 EXPECT_STREQ(dup.ptr, str.ptr);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
65 EXPECT_ZERO_TERMINATED(dup);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
66 cx_strfree(&dup);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
67
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
68 str.length = 2;
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
69 dup = cx_strdup(str);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
70 ASSERT_EQ(dup.length, str.length);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
71 EXPECT_STREQ(dup.ptr, "te");
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
72 EXPECT_ZERO_TERMINATED(dup);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
73 cx_strfree(&dup);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
74 }
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
75
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 TEST(String, strlen) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 cxstring s1 = CX_STR("1234");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 cxstring s2 = CX_STR(".:.:.");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 cxstring s3 = CX_STR("X");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 size_t len0 = cx_strlen(0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 size_t len1 = cx_strlen(1, s1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 size_t len2 = cx_strlen(2, s1, s2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 size_t len3 = cx_strlen(3, s1, s2, s3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 EXPECT_EQ(len0, 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 EXPECT_EQ(len1, 4);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 EXPECT_EQ(len2, 9);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 EXPECT_EQ(len3, 10);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
92 TEST(String, strsubs) {
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
93 cxstring str = CX_STR("A test string");
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
94
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
95 cxstring sub = cx_strsubs(str, 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
96 EXPECT_EQ(cx_strcmp(sub, str), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
97
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
98 sub = cx_strsubs(str, 2);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
99 EXPECT_EQ(cx_strcmp(sub, cx_str("test string")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
100
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
101 sub = cx_strsubs(str, 7);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
102 EXPECT_EQ(cx_strcmp(sub, cx_str("string")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
103
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
104 sub = cx_strsubs(str, 15);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
105 EXPECT_EQ(cx_strcmp(sub, cx_str("")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
106
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
107 sub = cx_strsubsl(str, 2, 4);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
108 EXPECT_EQ(cx_strcmp(sub, cx_str("test")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
109
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
110 sub = cx_strsubsl(str, 7, 3);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
111 EXPECT_EQ(cx_strcmp(sub, cx_str("str")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
112
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
113 sub = cx_strsubsl(str, 7, 20);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
114 EXPECT_EQ(cx_strcmp(sub, cx_str("string")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
115
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
116 // just for coverage, call the _m variant
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
117 auto m = cx_strsubs_m(cx_mutstrn(nullptr, 0), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
118 EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
119 }
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
121 TEST(String, strchr) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
122 cxstring str = CX_STR("I will find you - and I will kill you");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
123
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
124 cxstring notfound = cx_strchr(str, 'x');
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
125 EXPECT_EQ(notfound.length, 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
126
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
127 cxstring result = cx_strchr(str, 'w');
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
128 EXPECT_EQ(result.length, 35);
587
3dd55e246d2d use EXPECT_STREQ instead of strcmp
Mike Becker <universe@uap-core.de>
parents: 586
diff changeset
129 EXPECT_STREQ(result.ptr, "will find you - and I will kill you");
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
130
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
131 // just for coverage, call the _m variant
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
132 auto m = cx_strchr_m(cx_mutstrn(nullptr, 0), 'a');
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
133 EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
134 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
135
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
136 TEST(String, strrchr) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
137 cxstring str = CX_STR("I will find you - and I will kill you");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
138
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
139 cxstring notfound = cx_strrchr(str, 'x');
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
140 EXPECT_EQ(notfound.length, 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
141
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
142 cxstring result = cx_strrchr(str, 'w');
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
143 EXPECT_EQ(result.length, 13);
587
3dd55e246d2d use EXPECT_STREQ instead of strcmp
Mike Becker <universe@uap-core.de>
parents: 586
diff changeset
144 EXPECT_STREQ(result.ptr, "will kill you");
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
145
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
146 // just for coverage, call the _m variant
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
147 auto m = cx_strrchr_m(cx_mutstrn(nullptr, 0), 'a');
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
148 EXPECT_EQ(cx_strcmp(cx_strcast(m), cx_str("")), 0);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
149 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
150
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
151 TEST(String, strstr) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
152 cxstring str = CX_STR("find the match in this string");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
153 cxstring longstr = CX_STR(
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
154 "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
155 "mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
156 "yzabcdeababababnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
157 "klmnopqrstuvwxyzaababababababababrstuvwxyzabcdefghijklmnopqrstuv"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
158 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
159 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
160 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
161 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
162 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
163 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
164 "wxyz1234567890");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
165 cxstring longstrpattern = CX_STR(
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
166 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
167 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
168 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
169 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
170 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
171 );
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
172 cxstring longstrresult = CX_STR(
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
173 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
174 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
175 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
176 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
177 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
178 "abababababababababababababababababababababababababababababababab"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
179 "wxyz1234567890"
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
180 );
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
181
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
182 cxstring notfound = cx_strstr(str, cx_str("no match"));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
183 EXPECT_EQ(notfound.length, 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
184
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
185 cxstring result = cx_strstr(str, cx_str("match"));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
186 EXPECT_EQ(result.length, 20);
587
3dd55e246d2d use EXPECT_STREQ instead of strcmp
Mike Becker <universe@uap-core.de>
parents: 586
diff changeset
187 EXPECT_STREQ(result.ptr, "match in this string");
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
188
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
189 result = cx_strstr(str, cx_str(""));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
190 EXPECT_EQ(result.length, str.length);
587
3dd55e246d2d use EXPECT_STREQ instead of strcmp
Mike Becker <universe@uap-core.de>
parents: 586
diff changeset
191 EXPECT_STREQ(result.ptr, str.ptr);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
192
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
193 result = cx_strstr(longstr, longstrpattern);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
194 EXPECT_EQ(result.length, longstrresult.length);
587
3dd55e246d2d use EXPECT_STREQ instead of strcmp
Mike Becker <universe@uap-core.de>
parents: 586
diff changeset
195 EXPECT_STREQ(result.ptr, longstrresult.ptr);
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
196
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
197 // just for coverage, call the _m variant
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
198 auto mstr = cx_strdup(longstr);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
199 auto m = cx_strstr_m(mstr, longstrpattern);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
200 EXPECT_EQ(m.length, longstrresult.length);
587
3dd55e246d2d use EXPECT_STREQ instead of strcmp
Mike Becker <universe@uap-core.de>
parents: 586
diff changeset
201 EXPECT_STREQ(m.ptr, longstrresult.ptr);
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
202 cx_strfree(&mstr);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
203 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
204
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
205 TEST(String, strcmp) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
206 cxstring str = CX_STR("compare this");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
207
588
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
208 EXPECT_EQ(cx_strcmp(cx_str(""), cx_str("")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
209 EXPECT_GT(cx_strcmp(str, cx_str("")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
210 EXPECT_EQ(cx_strcmp(str, cx_str("compare this")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
211 EXPECT_NE(cx_strcmp(str, cx_str("Compare This")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
212 EXPECT_LT(cx_strcmp(str, cx_str("compare tool")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
213 EXPECT_GT(cx_strcmp(str, cx_str("compare shit")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
214 EXPECT_LT(cx_strcmp(str, cx_str("compare this not")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
215 EXPECT_GT(cx_strcmp(str, cx_str("compare")), 0);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
216 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
217
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
218 TEST(String, strcasecmp) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
219 cxstring str = CX_STR("compare this");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
220
588
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
221 EXPECT_EQ(cx_strcasecmp(cx_str(""), cx_str("")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
222 EXPECT_GT(cx_strcasecmp(str, cx_str("")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
223 EXPECT_EQ(cx_strcasecmp(str, cx_str("compare this")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
224 EXPECT_EQ(cx_strcasecmp(str, cx_str("Compare This")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
225 EXPECT_LT(cx_strcasecmp(str, cx_str("compare tool")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
226 EXPECT_GT(cx_strcasecmp(str, cx_str("compare shit")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
227 EXPECT_LT(cx_strcasecmp(str, cx_str("compare this not")), 0);
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
228 EXPECT_GT(cx_strcasecmp(str, cx_str("compare")), 0);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
229 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
230
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
231 TEST(String, strcat) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
232 cxstring s1 = CX_STR("12");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
233 cxstring s2 = CX_STR("34");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
234 cxstring s3 = CX_STR("56");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
235 cxstring sn = {nullptr, 0};
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
236
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
237 CxTestingAllocator alloc;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
238
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
239 cxmutstr t1 = cx_strcat_a(&alloc, 2, s1, s2);
588
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
240 EXPECT_EQ(cx_strcmp(cx_strcast(t1), cx_str("1234")), 0);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
241 EXPECT_ZERO_TERMINATED(t1);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
242 cx_strfree_a(&alloc, &t1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
243
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
244 cxmutstr t2 = cx_strcat_a(&alloc, 3, s1, s2, s3);
588
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
245 EXPECT_EQ(cx_strcmp(cx_strcast(t2), cx_str("123456")), 0);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
246 EXPECT_ZERO_TERMINATED(t2);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
247 cx_strfree_a(&alloc, &t2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
248
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
249 cxmutstr t3 = cx_strcat_a(&alloc, 6, s1, sn, s2, sn, s3, sn);
588
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
250 EXPECT_EQ(cx_strcmp(cx_strcast(t3), cx_str("123456")), 0);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
251 EXPECT_ZERO_TERMINATED(t3);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
252 cx_strfree_a(&alloc, &t3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
253
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
254 cxmutstr t4 = cx_strcat_a(&alloc, 2, sn, sn);
588
6a3cd8f0a2cf do not use c++ object initialization
Mike Becker <universe@uap-core.de>
parents: 587
diff changeset
255 EXPECT_EQ(cx_strcmp(cx_strcast(t4), cx_str("")), 0);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
256 EXPECT_ZERO_TERMINATED(t4);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
257 cx_strfree_a(&alloc, &t4);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
258
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
259 EXPECT_TRUE(alloc.verify());
597
8b48126671cf #217 cover cx_strcat macro
Mike Becker <universe@uap-core.de>
parents: 589
diff changeset
260
8b48126671cf #217 cover cx_strcat macro
Mike Becker <universe@uap-core.de>
parents: 589
diff changeset
261 // use the macro
8b48126671cf #217 cover cx_strcat macro
Mike Becker <universe@uap-core.de>
parents: 589
diff changeset
262 cxmutstr t5 = cx_strcat(3, s3, s1, s2);
8b48126671cf #217 cover cx_strcat macro
Mike Becker <universe@uap-core.de>
parents: 589
diff changeset
263 EXPECT_EQ(cx_strcmp(cx_strcast(t5), cx_str("561234")), 0);
8b48126671cf #217 cover cx_strcat macro
Mike Becker <universe@uap-core.de>
parents: 589
diff changeset
264 EXPECT_ZERO_TERMINATED(t5);
8b48126671cf #217 cover cx_strcat macro
Mike Becker <universe@uap-core.de>
parents: 589
diff changeset
265 cx_strfree(&t5);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
266 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
267
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
268 TEST(String, strsplit) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
269
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
270 cxstring test = cx_str("this,is,a,csv,string");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
271 size_t capa = 8;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
272 cxstring list[8];
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
273 size_t n;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
274
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
275 /* special case: empty string */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
276 n = cx_strsplit(test, cx_str(""), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
277 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
278 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
279
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
280 /* no delimiter occurrence */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
281 n = cx_strsplit(test, cx_str("z"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
282 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
283 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
284
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
285 /* partially matching delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
286 n = cx_strsplit(test, cx_str("is,not"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
287 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
288 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
289
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
290 /* matching single-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
291 n = cx_strsplit(test, cx_str(","), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
292 ASSERT_EQ(n, 5);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
293 EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
294 EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
295 EXPECT_EQ(cx_strcmp(list[2], cx_str("a")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
296 EXPECT_EQ(cx_strcmp(list[3], cx_str("csv")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
297 EXPECT_EQ(cx_strcmp(list[4], cx_str("string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
298
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
299 /* matching multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
300 n = cx_strsplit(test, cx_str("is"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
301 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
302 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
303 EXPECT_EQ(cx_strcmp(list[1], cx_str(",")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
304 EXPECT_EQ(cx_strcmp(list[2], cx_str(",a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
305
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
306 /* bounded list using single-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
307 n = cx_strsplit(test, cx_str(","), 3, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
308 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
309 EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
310 EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
311 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
312
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
313 /* bounded list using multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
314 n = cx_strsplit(test, cx_str("is"), 2, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
315 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
316 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
317 EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
318
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
319 /* start with delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
320 n = cx_strsplit(test, cx_str("this"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
321 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
322 EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
323 EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
324
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
325 /* end with delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
326 n = cx_strsplit(test, cx_str("string"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
327 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
328 EXPECT_EQ(cx_strcmp(list[0], cx_str("this,is,a,csv,")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
329 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
330
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
331
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
332 /* end with delimiter exceed bound */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
333 n = cx_strsplit(cx_str("a,b,c,"), cx_str(","), 3, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
334 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
335 EXPECT_EQ(cx_strcmp(list[0], cx_str("a")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
336 EXPECT_EQ(cx_strcmp(list[1], cx_str("b")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
337 EXPECT_EQ(cx_strcmp(list[2], cx_str("c,")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
338
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
339 /* exact match */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
340 n = cx_strsplit(test, cx_str("this,is,a,csv,string"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
341 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
342 EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
343 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
344
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
345 /* string to be split is only substring */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
346 n = cx_strsplit(test, cx_str("this,is,a,csv,string,with,extension"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
347 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
348 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
349
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
350 /* subsequent encounter of delimiter (the string between is empty) */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
351 n = cx_strsplit(test, cx_str("is,"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
352 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
353 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
354 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
355 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
356
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
357 /* call the _m variant just for coverage */
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
358 auto mtest = cx_strdup(test);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
359 cxmutstr mlist[4];
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
360 n = cx_strsplit_m(mtest, cx_str("is,"), 4, mlist);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
361 ASSERT_EQ(n, 3);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
362 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), cx_str("th")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
363 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), cx_str("")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
364 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), cx_str("a,csv,string")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
365 cx_strfree(&mtest);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
366 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
367
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
368 TEST(String, strsplit_a) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
369 CxTestingAllocator alloc;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
370
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
371 cxstring test = cx_str("this,is,a,csv,string");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
372 size_t capa = 8;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
373 cxstring *list;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
374 size_t n;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
375
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
376 /* special case: empty string */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
377 n = cx_strsplit_a(&alloc, test, cx_str(""), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
378 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
379 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
380 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
381
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
382 /* no delimiter occurrence */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
383 n = cx_strsplit_a(&alloc, test, cx_str("z"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
384 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
385 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
386 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
387
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
388 /* partially matching delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
389 n = cx_strsplit_a(&alloc, test, cx_str("is,not"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
390 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
391 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
392 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
393
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
394 /* matching single-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
395 n = cx_strsplit_a(&alloc, test, cx_str(","), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
396 ASSERT_EQ(n, 5);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
397 EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
398 EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
399 EXPECT_EQ(cx_strcmp(list[2], cx_str("a")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
400 EXPECT_EQ(cx_strcmp(list[3], cx_str("csv")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
401 EXPECT_EQ(cx_strcmp(list[4], cx_str("string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
402 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
403
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
404 /* matching multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
405 n = cx_strsplit_a(&alloc, test, cx_str("is"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
406 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
407 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
408 EXPECT_EQ(cx_strcmp(list[1], cx_str(",")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
409 EXPECT_EQ(cx_strcmp(list[2], cx_str(",a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
410 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
411
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
412 /* bounded list using single-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
413 n = cx_strsplit_a(&alloc, test, cx_str(","), 3, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
414 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
415 EXPECT_EQ(cx_strcmp(list[0], cx_str("this")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
416 EXPECT_EQ(cx_strcmp(list[1], cx_str("is")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
417 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
418 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
419
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
420 /* bounded list using multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
421 n = cx_strsplit_a(&alloc, test, cx_str("is"), 2, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
422 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
423 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
424 EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
425 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
426
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
427 /* start with delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
428 n = cx_strsplit_a(&alloc, test, cx_str("this"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
429 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
430 EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
431 EXPECT_EQ(cx_strcmp(list[1], cx_str(",is,a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
432 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
433
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
434 /* end with delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
435 n = cx_strsplit_a(&alloc, test, cx_str("string"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
436 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
437 EXPECT_EQ(cx_strcmp(list[0], cx_str("this,is,a,csv,")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
438 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
439 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
440
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
441 /* end with delimiter exceed bound */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
442 n = cx_strsplit_a(&alloc, cx_str("a,b,c,"), cx_str(","), 3, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
443 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
444 EXPECT_EQ(cx_strcmp(list[0], cx_str("a")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
445 EXPECT_EQ(cx_strcmp(list[1], cx_str("b")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
446 EXPECT_EQ(cx_strcmp(list[2], cx_str("c,")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
447 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
448
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
449 /* exact match */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
450 n = cx_strsplit_a(&alloc, test, cx_str("this,is,a,csv,string"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
451 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
452 EXPECT_EQ(cx_strcmp(list[0], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
453 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
454 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
455
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
456 /* string to be split is only substring */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
457 n = cx_strsplit_a(&alloc, test, cx_str("this,is,a,csv,string,with,extension"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
458 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
459 EXPECT_EQ(cx_strcmp(list[0], test), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
460 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
461
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
462 /* subsequent encounter of delimiter (the string between is empty) */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
463 n = cx_strsplit_a(&alloc, test, cx_str("is,"), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
464 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
465 EXPECT_EQ(cx_strcmp(list[0], cx_str("th")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
466 EXPECT_EQ(cx_strcmp(list[1], cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
467 EXPECT_EQ(cx_strcmp(list[2], cx_str("a,csv,string")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
468 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
469
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
470 /* call the _m variant just for coverage */
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
471 auto mtest = cx_strdup(test);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
472 cxmutstr *mlist;
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
473 n = cx_strsplit_ma(&alloc, mtest, cx_str("is,"), 4, &mlist);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
474 ASSERT_EQ(n, 3);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
475 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[0]), cx_str("th")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
476 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[1]), cx_str("")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
477 EXPECT_EQ(cx_strcmp(cx_strcast(mlist[2]), cx_str("a,csv,string")), 0);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
478 cxFree(&alloc, mlist);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
479 cx_strfree(&mtest);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
480
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
481 EXPECT_TRUE(alloc.verify());
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
482 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
483
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
484 TEST(String, strtrim) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
485 cxstring t1 = cx_strtrim(cx_str(" ein test \t "));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
486 cxstring t2 = cx_strtrim(cx_str("abc"));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
487 cxstring t3 = cx_strtrim(cx_str(" 123"));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
488 cxstring t4 = cx_strtrim(cx_str("xyz "));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
489 cxstring t5 = cx_strtrim(cx_str(" "));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
490 cxstring empty = cx_strtrim(cx_str(""));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
491
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
492 EXPECT_EQ(cx_strcmp(t1, cx_str("ein test")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
493 EXPECT_EQ(cx_strcmp(t2, cx_str("abc")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
494 EXPECT_EQ(cx_strcmp(t3, cx_str("123")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
495 EXPECT_EQ(cx_strcmp(t4, cx_str("xyz")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
496 EXPECT_EQ(cx_strcmp(t5, cx_str("")), 0);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
497 EXPECT_EQ(cx_strcmp(empty, cx_str("")), 0);
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
498
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
499 /* call the _m variant just for coverage */
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
500 cxmutstr m1 = cx_strtrim_m(cx_mutstr((char *) " ein test \t "));
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
501 EXPECT_EQ(cx_strcmp(cx_strcast(m1), cx_str("ein test")), 0);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
502 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
503
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
504 TEST(String, strprefix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
505 cxstring str = CX_STR("test my prefix and my suffix");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
506 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
507 EXPECT_FALSE(cx_strprefix(empty, cx_str("pref")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
508 EXPECT_TRUE(cx_strprefix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
509 EXPECT_TRUE(cx_strprefix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
510 EXPECT_TRUE(cx_strprefix(str, cx_str("test ")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
511 EXPECT_FALSE(cx_strprefix(str, cx_str("8-) fsck ")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
512 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
513
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
514 TEST(String, strsuffix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
515 cxstring str = CX_STR("test my prefix and my suffix");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
516 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
517 EXPECT_FALSE(cx_strsuffix(empty, cx_str("suf")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
518 EXPECT_TRUE(cx_strsuffix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
519 EXPECT_TRUE(cx_strsuffix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
520 EXPECT_TRUE(cx_strsuffix(str, cx_str("fix")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
521 EXPECT_FALSE(cx_strsuffix(str, cx_str("fox")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
522 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
523
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
524 TEST(String, strcaseprefix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
525 cxstring str = CX_STR("test my prefix and my suffix");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
526 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
527 EXPECT_FALSE(cx_strcaseprefix(empty, cx_str("pREf")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
528 EXPECT_TRUE(cx_strcaseprefix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
529 EXPECT_TRUE(cx_strcaseprefix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
530 EXPECT_TRUE(cx_strcaseprefix(str, cx_str("TEST ")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
531 EXPECT_FALSE(cx_strcaseprefix(str, cx_str("8-) fsck ")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
532 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
533
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
534 TEST(String, strcasesuffix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
535 cxstring str = CX_STR("test my prefix and my suffix");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
536 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
537 EXPECT_FALSE(cx_strcasesuffix(empty, cx_str("sUf")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
538 EXPECT_TRUE(cx_strcasesuffix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
539 EXPECT_TRUE(cx_strcasesuffix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
540 EXPECT_TRUE(cx_strcasesuffix(str, cx_str("FIX")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
541 EXPECT_FALSE(cx_strcasesuffix(str, cx_str("fox")));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
542 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
543
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
544 TEST(String, strreplace) {
598
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
545 CxTestingAllocator alloc;
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
546 cxstring str = CX_STR("test ababab string aba");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
547 cxstring longstr = CX_STR(
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
548 "xyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacd");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
549 cxstring notrail = CX_STR("test abab");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
550 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
551 cxstring astr = CX_STR("aaaaaaaaaa");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
552 cxstring csstr = CX_STR("test AB ab TEST xyz");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
553
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
554 cxmutstr repl = cx_strreplace(str, cx_str("abab"), cx_str("muchlonger"));
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
555 auto expected = "test muchlongerab string aba";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
556
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
557 cxmutstr repln = cx_strreplacen(str, cx_str("ab"), cx_str("c"), 2);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
558 auto expectedn = "test ccab string aba";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
559
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
560 cxmutstr longrepl = cx_strreplace(longstr, cx_str("a"), cx_str("z"));
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
561 auto longexpect = "xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
562
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
563 cxmutstr replnotrail = cx_strreplace(notrail, cx_str("ab"), cx_str("z"));
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
564 auto notrailexpect = "test zz";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
565
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
566 cxmutstr repleq = cx_strreplace(str, str, cx_str("hello"));
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
567 auto eqexpect = "hello";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
568
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
569 cxmutstr replempty1 = cx_strreplace(empty, cx_str("ab"), cx_str("c")); // expect: empty
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
570 cxmutstr replempty2 = cx_strreplace(str, cx_str("abab"), empty);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
571 auto emptyexpect2 = "test ab string aba";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
572
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
573 cxmutstr replpre = cx_strreplace(str, cx_str("test "), cx_str("TEST "));
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
574 auto preexpected = "TEST ababab string aba";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
575
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
576 cxmutstr replan1 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 1);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
577 auto an1expected = "xaaaaaaaaa";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
578
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
579 cxmutstr replan4 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 4);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
580 auto an4expected = "xxxxaaaaaa";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
581
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
582 cxmutstr replan9 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 9);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
583 auto an9expected = "xxxxxxxxxa";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
584
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
585 cxmutstr replan10 = cx_strreplacen(astr, cx_str("a"), cx_str("x"), 10);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
586 auto an10expected = "xxxxxxxxxx";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
587
598
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
588 cxmutstr repl1_a = cx_strreplace_a(&alloc, csstr, cx_str("AB"), cx_str("*"));
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
589 auto expeced1_a = "test * ab TEST xyz";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
590
598
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
591 cxmutstr repl2_a = cx_strreplace_a(&alloc, csstr, cx_str("test"), cx_str("TEST"));
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
592 auto expected2_a = "TEST AB ab TEST xyz";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
593
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
594
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
595 EXPECT_NE(repl.ptr, str.ptr);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
596 EXPECT_ZERO_TERMINATED(repl);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
597 EXPECT_STREQ(repl.ptr, expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
598 EXPECT_ZERO_TERMINATED(repln);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
599 EXPECT_STREQ(repln.ptr, expectedn);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
600 EXPECT_ZERO_TERMINATED(longrepl);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
601 EXPECT_STREQ(longrepl.ptr, longexpect);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
602 EXPECT_ZERO_TERMINATED(replnotrail);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
603 EXPECT_STREQ(replnotrail.ptr, notrailexpect);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
604 EXPECT_ZERO_TERMINATED(repleq);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
605 EXPECT_STREQ(repleq.ptr, eqexpect);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
606 EXPECT_ZERO_TERMINATED(replempty1);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
607 EXPECT_STREQ(replempty1.ptr, "");
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
608 EXPECT_ZERO_TERMINATED(replempty2);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
609 EXPECT_STREQ(replempty2.ptr, emptyexpect2);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
610 EXPECT_ZERO_TERMINATED(replpre);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
611 EXPECT_STREQ(replpre.ptr, preexpected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
612 EXPECT_ZERO_TERMINATED(replan1);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
613 EXPECT_STREQ(replan1.ptr, an1expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
614 EXPECT_ZERO_TERMINATED(replan4);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
615 EXPECT_STREQ(replan4.ptr, an4expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
616 EXPECT_ZERO_TERMINATED(replan9);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
617 EXPECT_STREQ(replan9.ptr, an9expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
618 EXPECT_ZERO_TERMINATED(replan10);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
619 EXPECT_STREQ(replan10.ptr, an10expected);
598
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
620 EXPECT_ZERO_TERMINATED(repl1_a);
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
621 EXPECT_STREQ(repl1_a.ptr, expeced1_a);
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
622 EXPECT_ZERO_TERMINATED(repl2_a);
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
623 EXPECT_STREQ(repl2_a.ptr, expected2_a);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
624
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
625 cx_strfree(&repl);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
626 cx_strfree(&repln);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
627 cx_strfree(&longrepl);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
628 cx_strfree(&replnotrail);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
629 cx_strfree(&repleq);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
630 cx_strfree(&replempty1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
631 cx_strfree(&replempty2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
632 cx_strfree(&replpre);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
633 cx_strfree(&replan1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
634 cx_strfree(&replan4);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
635 cx_strfree(&replan9);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
636 cx_strfree(&replan10);
598
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
637
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
638 cx_strfree_a(&alloc, &repl1_a);
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
639 cx_strfree_a(&alloc, &repl2_a);
70b7456b5b12 #217 cover cx_strreplace_a() macro
Mike Becker <universe@uap-core.de>
parents: 597
diff changeset
640 EXPECT_TRUE(alloc.verify());
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
641 }
586
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
642
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
643 TEST(String, strupper) {
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
644 cxmutstr str = cx_strdup(cx_str("thIs 1s @ Te$t"));
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
645 cx_strupper(str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
646 EXPECT_STREQ(str.ptr, "THIS 1S @ TE$T");
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
647 cx_strfree(&str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
648 }
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
649
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
650 TEST(String, strlower) {
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
651 cxmutstr str = cx_strdup(cx_str("thIs 1s @ Te$t"));
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
652 cx_strlower(str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
653 EXPECT_STREQ(str.ptr, "this 1s @ te$t");
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
654 cx_strfree(&str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
655 }

mercurial