1 /* EINA - EFL data type library
2 * Copyright (C) 2010 Sebastian Dransfeld
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
25 #include "eina_suite.h"
28 START_TEST(strbuf_simple)
33 "This test should be so long that it is longer than the initial size of strbuf"
37 buf = eina_strbuf_new();
40 eina_strbuf_append(buf, TEXT);
41 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT));
42 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
43 eina_strbuf_append(buf, TEXT);
44 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
45 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
46 txt = eina_strbuf_string_steal(buf);
47 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
48 fail_if(strcmp(txt, TEXT TEXT));
50 fail_if(eina_strbuf_length_get(buf) != 0);
51 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
52 eina_strbuf_append(buf, TEXT);
53 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
54 eina_strbuf_reset(buf);
55 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
56 fail_if(eina_strbuf_length_get(buf) != 0);
57 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT));
59 eina_strbuf_free(buf);
66 START_TEST(strbuf_manage_simple)
71 "This test should be so long that it is longer than the initial size of strbuf"
77 buf = eina_strbuf_manage_new(txt);
80 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT));
81 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
82 eina_strbuf_append(buf, TEXT);
83 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
84 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
85 txt = eina_strbuf_string_steal(buf);
86 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
87 fail_if(strcmp(txt, TEXT TEXT));
89 fail_if(eina_strbuf_length_get(buf) != 0);
90 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
91 eina_strbuf_append(buf, TEXT);
92 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
93 eina_strbuf_reset(buf);
94 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
95 fail_if(eina_strbuf_length_get(buf) != 0);
96 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT));
98 eina_strbuf_free(buf);
105 START_TEST(strbuf_remove)
111 buf = eina_strbuf_new();
114 eina_strbuf_append(buf, "123 456 789 abc");
115 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
116 eina_strbuf_remove(buf, 0, 4);
117 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
118 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 abc"));
119 eina_strbuf_remove(buf, 8, 1000);
120 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
121 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 "));
122 eina_strbuf_remove(buf, 7, eina_strbuf_length_get(buf));
123 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
124 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789"));
125 eina_strbuf_remove(buf, 2, 4);
126 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
127 fail_if(strcmp(eina_strbuf_string_get(buf), "45789"));
128 eina_strbuf_remove(buf, 4, 1);
129 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
130 fail_if(strcmp(eina_strbuf_string_get(buf), "45789"));
131 eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf));
132 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
133 fail_if(strcmp(eina_strbuf_string_get(buf), ""));
136 "This test should be so long that it is longer than the initial size of strbuf"
137 eina_strbuf_append(buf, TEXT TEXT);
138 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
139 eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf) - 1);
140 fail_if(strcmp(eina_strbuf_string_get(buf), "f"));
143 eina_strbuf_free(buf);
149 START_TEST(strbuf_append)
155 buf = eina_strbuf_new();
158 eina_strbuf_append(buf, "abc");
159 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
160 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
161 eina_strbuf_reset(buf);
163 eina_strbuf_append_escaped(buf, "abc");
164 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
165 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
166 eina_strbuf_reset(buf);
168 eina_strbuf_append_escaped(buf, "abc '\\");
169 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
170 fail_if(strcmp(eina_strbuf_string_get(buf), "abc\\ \\'\\\\"));
171 eina_strbuf_reset(buf);
173 eina_strbuf_append_n(buf, "abc", 2);
174 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
175 fail_if(strcmp(eina_strbuf_string_get(buf), "ab"));
176 eina_strbuf_reset(buf);
178 eina_strbuf_append_char(buf, 'a');
179 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
180 fail_if(strcmp(eina_strbuf_string_get(buf), "a"));
181 eina_strbuf_reset(buf);
183 eina_strbuf_append_length(buf, "something", strlen("something"));
184 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
185 fail_if(strcmp(eina_strbuf_string_get(buf), "something"));
186 eina_strbuf_reset(buf);
188 eina_strbuf_append_length(buf, "somethingELSE", strlen("something"));
189 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
190 fail_if(strcmp(eina_strbuf_string_get(buf), "something"));
191 eina_strbuf_reset(buf);
193 eina_strbuf_free(buf);
199 START_TEST(strbuf_insert)
205 buf = eina_strbuf_new();
208 eina_strbuf_insert(buf, "abc", 10);
209 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
210 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
212 eina_strbuf_insert(buf, "123", 0);
213 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
214 fail_if(strcmp(eina_strbuf_string_get(buf), "123abc"));
216 eina_strbuf_insert(buf, "xyz", eina_strbuf_length_get(buf));
217 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
218 fail_if(strcmp(eina_strbuf_string_get(buf), "123abcxyz"));
220 eina_strbuf_insert(buf, "xyz", 1);
221 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
222 fail_if(strcmp(eina_strbuf_string_get(buf), "1xyz23abcxyz"));
224 eina_strbuf_insert_n(buf, "ABCDEF", 2, 1);
225 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
226 fail_if(strcmp(eina_strbuf_string_get(buf), "1ABxyz23abcxyz"));
228 eina_strbuf_insert_n(buf, "EINA", 2, 3);
229 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
230 fail_if(strcmp(eina_strbuf_string_get(buf), "1ABEIxyz23abcxyz"));
232 eina_strbuf_insert_escaped(buf, "678", 3);
233 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
234 fail_if(strncmp(eina_strbuf_string_get(buf) + 3, "678", 3));
236 eina_strbuf_insert_escaped(buf, "089 '\\", 9);
237 fail_if(strlen(eina_strbuf_string_get(
238 buf)) != eina_strbuf_length_get(buf));
239 fail_if(strncmp(eina_strbuf_string_get(buf) + 9,
241 strlen("089\\ \\'\\\\")));
242 eina_strbuf_reset(buf);
244 eina_strbuf_free(buf);
250 START_TEST(strbuf_replace)
256 buf = eina_strbuf_new();
259 eina_strbuf_append(buf, "aaa");
260 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
261 fail_if(strcmp(eina_strbuf_string_get(buf), "aaa"));
263 fail_if(!eina_strbuf_replace(buf, "a", "b", 1));
264 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
265 fail_if(strcmp(eina_strbuf_string_get(buf), "baa"));
267 fail_if(eina_strbuf_replace_all(buf, "a", "b") != 2);
268 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
269 fail_if(strcmp(eina_strbuf_string_get(buf), "bbb"));
271 fail_if(!eina_strbuf_replace(buf, "b", "cc", 2));
272 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
273 fail_if(strcmp(eina_strbuf_string_get(buf), "bccb"));
275 fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 2);
276 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
277 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
279 fail_if(eina_strbuf_replace(buf, "c", "aa", 0));
280 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
281 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
283 fail_if(eina_strbuf_replace(buf, "c", "aa", 2));
284 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
285 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
287 fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 0);
288 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
289 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
292 eina_strbuf_free(buf);
298 START_TEST(strbuf_realloc)
301 char pattern[1024 * 16];
305 for (i = 0; i < sizeof(pattern) - 1; i++)
306 pattern[i] = 'a' + (i % 26);
311 buf = eina_strbuf_new();
316 eina_strbuf_append_length(buf, pattern, 1);
317 fail_if(eina_strbuf_length_get(buf) != sz + 1);
318 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 1));
321 eina_strbuf_append_length(buf, pattern, 32);
322 fail_if(eina_strbuf_length_get(buf) != sz + 32);
323 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 32));
326 eina_strbuf_append_length(buf, pattern, 64);
327 fail_if(eina_strbuf_length_get(buf) != sz + 64);
328 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 64));
331 eina_strbuf_append_length(buf, pattern, 128);
332 fail_if(eina_strbuf_length_get(buf) != sz + 128);
333 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 128));
336 eina_strbuf_append_length(buf, pattern, 4096);
337 fail_if(eina_strbuf_length_get(buf) != sz + 4096);
338 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 4096));
341 eina_strbuf_append_length(buf, pattern, sizeof(pattern) - 1);
342 fail_if(eina_strbuf_length_get(buf) != sz + sizeof(pattern) - 1);
343 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, sizeof(pattern) -
345 sz += sizeof(pattern) - 1;
348 eina_strbuf_remove(buf, 1024, 1024 + 1234);
349 fail_if(eina_strbuf_length_get(buf) != sz - 1234);
352 eina_strbuf_remove(buf, 0, 0 + 8192);
353 fail_if(eina_strbuf_length_get(buf) != sz - 8192);
356 eina_strbuf_remove(buf, 0, 0 + 32);
357 fail_if(eina_strbuf_length_get(buf) != sz - 32);
361 eina_strbuf_free(buf);
367 START_TEST(strbuf_append_realloc)
370 const size_t runs = 40960;
371 const char target_pattern[] = "stringstrsstr";
373 size_t i, target_pattern_size;
377 buf = eina_strbuf_new();
380 for (i = 0; i < runs; i++)
382 fail_if(!eina_strbuf_append(buf, "string"));
383 fail_if(!eina_strbuf_append_n(buf, "string", 3));
384 fail_if(!eina_strbuf_append_char(buf, 's'));
385 fail_if(!eina_strbuf_append_length(buf, "string", 3));
388 target_pattern_size = strlen(target_pattern);
389 fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size));
391 str = eina_strbuf_string_get(buf);
392 fail_if(str == NULL);
393 for (i = 0; i < runs; i++, str += target_pattern_size)
394 fail_if(memcmp(str, target_pattern, target_pattern_size));
396 eina_strbuf_free(buf);
402 START_TEST(strbuf_prepend_realloc)
405 const size_t runs = 40960;
406 const char target_pattern[] = "strsstrstring";
408 size_t i, target_pattern_size;
412 buf = eina_strbuf_new();
415 for (i = 0; i < runs; i++)
417 fail_if(!eina_strbuf_prepend(buf, "string"));
418 fail_if(!eina_strbuf_prepend_n(buf, "string", 3));
419 fail_if(!eina_strbuf_prepend_char(buf, 's'));
420 fail_if(!eina_strbuf_prepend_length(buf, "string", 3));
423 target_pattern_size = strlen(target_pattern);
424 fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size));
426 str = eina_strbuf_string_get(buf);
427 fail_if(str == NULL);
428 for (i = 0; i < runs; i++, str += target_pattern_size)
429 fail_if(memcmp(str, target_pattern, target_pattern_size));
431 eina_strbuf_free(buf);
438 eina_test_strbuf(TCase *tc)
440 tcase_add_test(tc, strbuf_simple);
441 tcase_add_test(tc, strbuf_remove);
442 tcase_add_test(tc, strbuf_append);
443 tcase_add_test(tc, strbuf_insert);
444 tcase_add_test(tc, strbuf_replace);
445 tcase_add_test(tc, strbuf_realloc);
446 tcase_add_test(tc, strbuf_append_realloc);
447 tcase_add_test(tc, strbuf_prepend_realloc);
448 tcase_add_test(tc, strbuf_manage_simple);