89 UCX_TEST_ASSERT(n == 1, "ndo, list length must be 1"); |
89 UCX_TEST_ASSERT(n == 1, "ndo, list length must be 1"); |
90 UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "ndo, " |
90 UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "ndo, " |
91 "original string shall be returned as single list element"); |
91 "original string shall be returned as single list element"); |
92 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
92 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
93 "ndo, original has been modified"); |
93 "ndo, original has been modified"); |
|
94 for(int i=0;i<n;i++) { |
|
95 free(list[i].ptr); |
|
96 } |
94 free(list); |
97 free(list); |
95 |
98 |
96 /* partially matching delimiter (pmd) */ |
99 /* partially matching delimiter (pmd) */ |
97 n = 0; |
100 n = 0; |
98 list = sstrsplit(test, S("stringbuilder"), &n); |
101 list = sstrsplit(test, S("stringbuilder"), &n); |
99 UCX_TEST_ASSERT(n == 1, "pmd, list length must be 1"); |
102 UCX_TEST_ASSERT(n == 1, "pmd, list length must be 1"); |
100 UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "pmd, " |
103 UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "pmd, " |
101 "original string shall be returned as single list element"); |
104 "original string shall be returned as single list element"); |
102 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
105 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
103 "pmd, original has been modified"); |
106 "pmd, original has been modified"); |
|
107 for(int i=0;i<n;i++) { |
|
108 free(list[i].ptr); |
|
109 } |
104 free(list); |
110 free(list); |
105 |
111 |
106 /* matching single-char delimiter (mscd) */ |
112 /* matching single-char delimiter (mscd) */ |
107 n = 0; |
113 n = 0; |
108 list = sstrsplit(test, S(","), &n); |
114 list = sstrsplit(test, S(","), &n); |
112 UCX_TEST_ASSERT(strcmp(list[2].ptr, "a") == 0, "mscd, item 2 mismatch"); |
118 UCX_TEST_ASSERT(strcmp(list[2].ptr, "a") == 0, "mscd, item 2 mismatch"); |
113 UCX_TEST_ASSERT(strcmp(list[3].ptr, "csv") == 0, "mscd, item 3 mismatch"); |
119 UCX_TEST_ASSERT(strcmp(list[3].ptr, "csv") == 0, "mscd, item 3 mismatch"); |
114 UCX_TEST_ASSERT(strcmp(list[4].ptr, "string")==0, "mscd, item 4 mismatch"); |
120 UCX_TEST_ASSERT(strcmp(list[4].ptr, "string")==0, "mscd, item 4 mismatch"); |
115 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
121 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
116 "mscd, original has been modified"); |
122 "mscd, original has been modified"); |
|
123 for(int i=0;i<n;i++) { |
|
124 free(list[i].ptr); |
|
125 } |
117 free(list); |
126 free(list); |
118 |
127 |
119 /* matching multi-char delimiter (mmcd) */ |
128 /* matching multi-char delimiter (mmcd) */ |
120 n = 0; |
129 n = 0; |
121 list = sstrsplit(test, S("is"), &n); |
130 list = sstrsplit(test, S("is"), &n); |
124 UCX_TEST_ASSERT(strcmp(list[1].ptr, ",") == 0, "mmcd, item 1 mismatch"); |
133 UCX_TEST_ASSERT(strcmp(list[1].ptr, ",") == 0, "mmcd, item 1 mismatch"); |
125 UCX_TEST_ASSERT(strcmp(list[2].ptr, ",a,csv,string") == 0, |
134 UCX_TEST_ASSERT(strcmp(list[2].ptr, ",a,csv,string") == 0, |
126 "mmcd, item 2 mismatch"); |
135 "mmcd, item 2 mismatch"); |
127 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
136 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
128 "mmcd, original has been modified"); |
137 "mmcd, original has been modified"); |
|
138 for(int i=0;i<n;i++) { |
|
139 free(list[i].ptr); |
|
140 } |
129 free(list); |
141 free(list); |
130 |
142 |
131 /* bounded list using single-char delimiter (blsc) */ |
143 /* bounded list using single-char delimiter (blsc) */ |
132 n = 3; |
144 n = 3; |
133 list = sstrsplit(test, S(","), &n); |
145 list = sstrsplit(test, S(","), &n); |
136 UCX_TEST_ASSERT(strcmp(list[1].ptr, "is") == 0, "blsc, item 1 mismatch"); |
148 UCX_TEST_ASSERT(strcmp(list[1].ptr, "is") == 0, "blsc, item 1 mismatch"); |
137 UCX_TEST_ASSERT(strcmp(list[2].ptr, "a,csv,string") == 0, |
149 UCX_TEST_ASSERT(strcmp(list[2].ptr, "a,csv,string") == 0, |
138 "blsc, item 2 mismatch"); |
150 "blsc, item 2 mismatch"); |
139 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
151 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
140 "blsc, original has been modified"); |
152 "blsc, original has been modified"); |
|
153 for(int i=0;i<n;i++) { |
|
154 free(list[i].ptr); |
|
155 } |
141 free(list); |
156 free(list); |
142 |
157 |
143 /* bounded list using multi-char delimiter (blmc) */ |
158 /* bounded list using multi-char delimiter (blmc) */ |
144 n = 2; |
159 n = 2; |
145 list = sstrsplit(test, S("is"), &n); |
160 list = sstrsplit(test, S("is"), &n); |
147 UCX_TEST_ASSERT(strcmp(list[0].ptr, "th") == 0, "blmc, item 0 mismatch"); |
162 UCX_TEST_ASSERT(strcmp(list[0].ptr, "th") == 0, "blmc, item 0 mismatch"); |
148 UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, |
163 UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, |
149 "blmc, item 1 mismatch"); |
164 "blmc, item 1 mismatch"); |
150 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
165 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
151 "blmc, original has been modified"); |
166 "blmc, original has been modified"); |
|
167 for(int i=0;i<n;i++) { |
|
168 free(list[i].ptr); |
|
169 } |
152 free(list); |
170 free(list); |
153 |
171 |
154 /* start with delimiter (swd) */ |
172 /* start with delimiter (swd) */ |
155 n = 0; |
173 n = 0; |
156 list = sstrsplit(test, S("this"), &n); |
174 list = sstrsplit(test, S("this"), &n); |
158 UCX_TEST_ASSERT(list[0].length == 0, "swd, first item must be empty"); |
176 UCX_TEST_ASSERT(list[0].length == 0, "swd, first item must be empty"); |
159 UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, |
177 UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, |
160 "swd, second item corrupt"); |
178 "swd, second item corrupt"); |
161 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
179 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
162 "swd, original has been modified"); |
180 "swd, original has been modified"); |
|
181 for(int i=0;i<n;i++) { |
|
182 free(list[i].ptr); |
|
183 } |
163 free(list); |
184 free(list); |
164 |
185 |
165 /* end with delimiter (ewd) */ |
186 /* end with delimiter (ewd) */ |
166 n = 0; |
187 n = 0; |
167 list = sstrsplit(test, S("string"), &n); |
188 list = sstrsplit(test, S("string"), &n); |
169 UCX_TEST_ASSERT(strcmp(list[0].ptr, "this,is,a,csv,") == 0, |
190 UCX_TEST_ASSERT(strcmp(list[0].ptr, "this,is,a,csv,") == 0, |
170 "swd, first item corrupt"); |
191 "swd, first item corrupt"); |
171 UCX_TEST_ASSERT(list[1].length == 0, "ewd, second item must be empty"); |
192 UCX_TEST_ASSERT(list[1].length == 0, "ewd, second item must be empty"); |
172 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
193 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
173 "ewd, original has been modified"); |
194 "ewd, original has been modified"); |
|
195 for(int i=0;i<n;i++) { |
|
196 free(list[i].ptr); |
|
197 } |
174 free(list); |
198 free(list); |
175 |
199 |
176 /* exact match (exm) */ |
200 /* exact match (exm) */ |
177 n = 0; |
201 n = 0; |
178 list = sstrsplit(test, S("this,is,a,csv,string"), &n); |
202 list = sstrsplit(test, S("this,is,a,csv,string"), &n); |
179 UCX_TEST_ASSERT(n == 0, "exm, list length must be 0"); |
203 UCX_TEST_ASSERT(n == 0, "exm, list length must be 0"); |
180 UCX_TEST_ASSERT(list == NULL, "exm, list must be NULL"); |
204 UCX_TEST_ASSERT(list == NULL, "exm, list must be NULL"); |
|
205 for(int i=0;i<n;i++) { |
|
206 free(list[i].ptr); |
|
207 } |
181 free(list); |
208 free(list); |
182 |
209 |
183 /* substring (subs) */ |
210 /* substring (subs) */ |
184 n = 0; |
211 n = 0; |
185 list = sstrsplit(test, S("this,is,a,csv,string,with,extension"), &n); |
212 list = sstrsplit(test, S("this,is,a,csv,string,with,extension"), &n); |
186 UCX_TEST_ASSERT(n == 1, "subs, list length must be 1"); |
213 UCX_TEST_ASSERT(n == 1, "subs, list length must be 1"); |
187 UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, |
214 UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, |
188 "subs, single item must be the original string"); |
215 "subs, single item must be the original string"); |
189 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
216 UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, |
190 "subs, original has been modified"); |
217 "subs, original has been modified"); |
|
218 for(int i=0;i<n;i++) { |
|
219 free(list[i].ptr); |
|
220 } |
191 free(list); |
221 free(list); |
192 |
222 |
193 UCX_TEST_END |
223 UCX_TEST_END |
194 } |
224 } |
195 |
225 |