test/test_string.cpp

Tue, 04 Oct 2022 19:25:07 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 04 Oct 2022 19:25:07 +0200
changeset 591
7df0bcaecffa
parent 589
c290f8fd979e
child 597
8b48126671cf
permissions
-rw-r--r--

fix over-optimization of strstr

1. it's actually less performant to frequently read bytes
from an array instead of using the native word length
2. the SBO buffer should be local and not static to allow
multi-threading usage

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());
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
260 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
261
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
262 TEST(String, strsplit) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
263
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
264 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
265 size_t capa = 8;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
266 cxstring list[8];
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
267 size_t n;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
268
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
269 /* special case: empty string */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
270 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
271 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
272 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
273
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
274 /* no delimiter occurrence */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
275 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
276 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
277 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
278
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
279 /* partially matching delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
280 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
281 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
282 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
283
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
284 /* matching single-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
285 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
286 ASSERT_EQ(n, 5);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
287 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
288 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
289 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
290 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
291 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
292
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
293 /* matching multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
294 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
295 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
296 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
297 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
298 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
299
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
300 /* bounded list using single-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
301 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
302 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
303 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
304 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
305 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
306
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
307 /* bounded list using multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
308 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
309 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
310 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
311 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
312
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
313 /* start with 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("this"), capa, 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("")), 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 /* end 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("string"), 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("this,is,a,csv,")), 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("")), 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
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
326 /* end with delimiter exceed bound */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
327 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
328 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
329 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
330 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
331 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
332
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
333 /* exact match */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
334 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
335 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
336 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
337 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
338
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
339 /* string to be split is only substring */
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,with,extension"), capa, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
341 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
342 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
343
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
344 /* 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
345 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
346 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
347 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
348 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
349 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
350
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
351 /* 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
352 auto mtest = cx_strdup(test);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
353 cxmutstr mlist[4];
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
354 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
355 ASSERT_EQ(n, 3);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
356 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
357 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
358 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
359 cx_strfree(&mtest);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
360 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
361
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
362 TEST(String, strsplit_a) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
363 CxTestingAllocator alloc;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
364
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
365 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
366 size_t capa = 8;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
367 cxstring *list;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
368 size_t n;
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
369
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
370 /* special case: empty string */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
371 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
372 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
373 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
374 cxFree(&alloc, list);
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 /* no delimiter occurrence */
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("z"), 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 /* partially matching delimiter */
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("is,not"), 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 /* matching single-char 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(","), capa, &list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
390 ASSERT_EQ(n, 5);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
391 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
392 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
393 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
394 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
395 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
396 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
397
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
398 /* matching multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
399 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
400 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
401 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
402 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
403 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
404 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
405
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
406 /* bounded list using single-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
407 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
408 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
409 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
410 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
411 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
412 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
413
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
414 /* bounded list using multi-char delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
415 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
416 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
417 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
418 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
419 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
420
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
421 /* start with delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
422 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
423 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
424 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
425 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
426 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
427
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
428 /* end with delimiter */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
429 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
430 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
431 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
432 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
433 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
434
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
435 /* end with delimiter exceed bound */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
436 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
437 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
438 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
439 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
440 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
441 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
442
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
443 /* exact match */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
444 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
445 ASSERT_EQ(n, 2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
446 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
447 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
448 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
449
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
450 /* string to be split is only substring */
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
451 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
452 ASSERT_EQ(n, 1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
453 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
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 /* 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
457 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
458 ASSERT_EQ(n, 3);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
459 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
460 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
461 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
462 cxFree(&alloc, list);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
463
585
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
464 /* 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
465 auto mtest = cx_strdup(test);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
466 cxmutstr *mlist;
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
467 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
468 ASSERT_EQ(n, 3);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
469 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
470 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
471 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
472 cxFree(&alloc, mlist);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
473 cx_strfree(&mtest);
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
474
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
475 EXPECT_TRUE(alloc.verify());
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
476 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
477
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
478 TEST(String, strtrim) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
479 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
480 cxstring t2 = cx_strtrim(cx_str("abc"));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
481 cxstring t3 = cx_strtrim(cx_str(" 123"));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
482 cxstring t4 = cx_strtrim(cx_str("xyz "));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
483 cxstring t5 = cx_strtrim(cx_str(" "));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
484 cxstring empty = cx_strtrim(cx_str(""));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
485
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
486 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
487 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
488 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
489 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
490 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
491 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
492
038f5e99e00f add test coverage for _m variant functions
Mike Becker <universe@uap-core.de>
parents: 583
diff changeset
493 /* 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
494 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
495 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
496 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
497
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
498 TEST(String, strprefix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
499 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
500 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
501 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
502 EXPECT_TRUE(cx_strprefix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
503 EXPECT_TRUE(cx_strprefix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
504 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
505 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
506 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
507
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
508 TEST(String, strsuffix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
509 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
510 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
511 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
512 EXPECT_TRUE(cx_strsuffix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
513 EXPECT_TRUE(cx_strsuffix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
514 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
515 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
516 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
517
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
518 TEST(String, strcaseprefix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
519 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
520 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
521 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
522 EXPECT_TRUE(cx_strcaseprefix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
523 EXPECT_TRUE(cx_strcaseprefix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
524 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
525 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
526 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
527
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
528 TEST(String, strcasesuffix) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
529 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
530 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
531 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
532 EXPECT_TRUE(cx_strcasesuffix(str, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
533 EXPECT_TRUE(cx_strcasesuffix(empty, empty));
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
534 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
535 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
536 }
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
537
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
538 TEST(String, strreplace) {
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
539 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
540 cxstring longstr = CX_STR(
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
541 "xyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacd");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
542 cxstring notrail = CX_STR("test abab");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
543 cxstring empty = CX_STR("");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
544 cxstring astr = CX_STR("aaaaaaaaaa");
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
545 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
546
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
547 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
548 auto expected = "test muchlongerab string aba";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
549
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
550 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
551 auto expectedn = "test ccab string aba";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
552
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
553 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
554 auto longexpect = "xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
555
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
556 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
557 auto notrailexpect = "test zz";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
558
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
559 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
560 auto eqexpect = "hello";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
561
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
562 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
563 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
564 auto emptyexpect2 = "test ab string aba";
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 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
567 auto preexpected = "TEST ababab string aba";
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 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
570 auto an1expected = "xaaaaaaaaa";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
571
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
572 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
573 auto an4expected = "xxxxaaaaaa";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
574
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
575 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
576 auto an9expected = "xxxxxxxxxa";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
577
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
578 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
579 auto an10expected = "xxxxxxxxxx";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
580
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
581 cxmutstr replcs1 = cx_strreplace(csstr, cx_str("AB"), cx_str("*"));
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
582 auto cs1expected = "test * ab TEST xyz";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
584 cxmutstr replcs2 = cx_strreplace(csstr, cx_str("test"), cx_str("TEST"));
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
585 auto cs2expected = "TEST AB ab TEST xyz";
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
586
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
587
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
588 EXPECT_NE(repl.ptr, str.ptr);
589
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
589 EXPECT_ZERO_TERMINATED(repl);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
590 EXPECT_STREQ(repl.ptr, expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
591 EXPECT_ZERO_TERMINATED(repln);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
592 EXPECT_STREQ(repln.ptr, expectedn);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
593 EXPECT_ZERO_TERMINATED(longrepl);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
594 EXPECT_STREQ(longrepl.ptr, longexpect);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
595 EXPECT_ZERO_TERMINATED(replnotrail);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
596 EXPECT_STREQ(replnotrail.ptr, notrailexpect);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
597 EXPECT_ZERO_TERMINATED(repleq);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
598 EXPECT_STREQ(repleq.ptr, eqexpect);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
599 EXPECT_ZERO_TERMINATED(replempty1);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
600 EXPECT_STREQ(replempty1.ptr, "");
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
601 EXPECT_ZERO_TERMINATED(replempty2);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
602 EXPECT_STREQ(replempty2.ptr, emptyexpect2);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
603 EXPECT_ZERO_TERMINATED(replpre);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
604 EXPECT_STREQ(replpre.ptr, preexpected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
605 EXPECT_ZERO_TERMINATED(replan1);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
606 EXPECT_STREQ(replan1.ptr, an1expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
607 EXPECT_ZERO_TERMINATED(replan4);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
608 EXPECT_STREQ(replan4.ptr, an4expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
609 EXPECT_ZERO_TERMINATED(replan9);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
610 EXPECT_STREQ(replan9.ptr, an9expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
611 EXPECT_ZERO_TERMINATED(replan10);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
612 EXPECT_STREQ(replan10.ptr, an10expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
613 EXPECT_ZERO_TERMINATED(replcs1);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
614 EXPECT_STREQ(replcs1.ptr, cs1expected);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
615 EXPECT_ZERO_TERMINATED(replcs2);
c290f8fd979e add zero-termination guarantees
Mike Becker <universe@uap-core.de>
parents: 588
diff changeset
616 EXPECT_STREQ(replcs2.ptr, cs2expected);
583
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
617
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
618 cx_strfree(&repl);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
619 cx_strfree(&repln);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
620 cx_strfree(&longrepl);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
621 cx_strfree(&replnotrail);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
622 cx_strfree(&repleq);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
623 cx_strfree(&replempty1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
624 cx_strfree(&replempty2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
625 cx_strfree(&replpre);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
626 cx_strfree(&replan1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
627 cx_strfree(&replan4);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
628 cx_strfree(&replan9);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
629 cx_strfree(&replan10);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
630 cx_strfree(&replcs1);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
631 cx_strfree(&replcs2);
0f3c9662f9b5 add tests and missing implementations for strings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
632 }
586
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
633
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
634 TEST(String, strupper) {
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
635 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
636 cx_strupper(str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
637 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
638 cx_strfree(&str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
639 }
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
640
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
641 TEST(String, strlower) {
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
642 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
643 cx_strlower(str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
644 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
645 cx_strfree(&str);
aa51aaa907b9 add tests for strupper and strlower
Mike Becker <universe@uap-core.de>
parents: 585
diff changeset
646 }

mercurial