test/string_tests.c

changeset 147
1aa598f36872
parent 146
aa376dba1ba8
child 148
c27c2425c0b1
equal deleted inserted replaced
146:aa376dba1ba8 147:1aa598f36872
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

mercurial