libpurple/tests/test_trie.c

changeset 37606
c0eca5d1b8fa
parent 35790
3118fb87573e
child 40358
e6fe6fc1f516
equal deleted inserted replaced
37605:599b01f2f5a7 37606:c0eca5d1b8fa
18 * You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software 19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
21 */ 21 */
22 22
23 #include <string.h> 23 #include <glib.h>
24 24
25 #include "tests.h"
26 #include "../trie.h" 25 #include "../trie.h"
27 26
28 static gint find_sum; 27 static gint find_sum;
29 28
30 static gboolean 29 static gboolean
52 find_sum -= (gintptr)user_data * 0x1000; 51 find_sum -= (gintptr)user_data * 0x1000;
53 52
54 return TRUE; 53 return TRUE;
55 } 54 }
56 55
57 START_TEST(test_trie_replace) 56 static void
58 { 57 test_trie_replace_normal(void) {
59 PurpleTrie *trie; 58 PurpleTrie *trie;
60 const gchar *in; 59 const gchar *in;
61 gchar *out; 60 gchar *out;
62 61
63 trie = purple_trie_new(); 62 trie = purple_trie_new();
74 in = "Alice is testing her trie implementation, " 73 in = "Alice is testing her trie implementation, "
75 "but she's far away from making test tree overtested"; 74 "but she's far away from making test tree overtested";
76 75
77 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)1); 76 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)1);
78 77
79 assert_string_equal("Alice is [1:1002] her [1:1004] [1:1006]ation," 78 g_assert_cmpstr(
80 " but she's far away from making test [1:1005] [1:1003]", out); 79 "Alice is [1:1002] her [1:1004] [1:1006]ation,"
81 80 " but she's far away from making test [1:1005] [1:1003]",
82 g_object_unref(trie); 81 ==,
83 g_free(out); 82 out
84 } 83 );
85 END_TEST 84
86 85 g_object_unref(trie);
87 START_TEST(test_trie_replace_whole) 86 g_free(out);
88 { 87 }
88
89 static void
90 test_trie_replace_whole(void) {
89 PurpleTrie *trie; 91 PurpleTrie *trie;
90 const gchar *in; 92 const gchar *in;
91 gchar *out; 93 gchar *out;
92 94
93 trie = purple_trie_new(); 95 trie = purple_trie_new();
96 98
97 in = "test"; 99 in = "test";
98 100
99 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)2); 101 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)2);
100 102
101 assert_string_equal("[2:2002]", out); 103 g_assert_cmpstr("[2:2002]", ==, out);
102 104
103 g_object_unref(trie); 105 g_object_unref(trie);
104 g_free(out); 106 g_free(out);
105 } 107 }
106 END_TEST 108
107 109 static void
108 START_TEST(test_trie_replace_inner) 110 test_trie_replace_inner(void) {
109 {
110 PurpleTrie *trie; 111 PurpleTrie *trie;
111 const gchar *in; 112 const gchar *in;
112 gchar *out; 113 gchar *out;
113 114
114 trie = purple_trie_new(); 115 trie = purple_trie_new();
118 119
119 in = "the test!"; 120 in = "the test!";
120 121
121 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)3); 122 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)3);
122 123
123 assert_string_equal("the t[3:3001]!", out); 124 g_assert_cmpstr("the t[3:3001]!", ==, out);
124 125
125 g_object_unref(trie); 126 g_object_unref(trie);
126 g_free(out); 127 g_free(out);
127 } 128 }
128 END_TEST 129
129 130
130 START_TEST(test_trie_replace_empty) 131 static void
131 { 132 test_trie_replace_empty(void) {
132 PurpleTrie *trie; 133 PurpleTrie *trie;
133 const gchar *in; 134 const gchar *in;
134 gchar *out; 135 gchar *out;
135 136
136 trie = purple_trie_new(); 137 trie = purple_trie_new();
139 140
140 in = ""; 141 in = "";
141 142
142 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)4); 143 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)4);
143 144
144 assert_string_equal("", out); 145 g_assert_cmpstr("", ==, out);
145 146
146 g_object_unref(trie); 147 g_object_unref(trie);
147 g_free(out); 148 g_free(out);
148 } 149 }
149 END_TEST 150
150 151 static void
151 START_TEST(test_trie_multi_replace) 152 test_trie_multi_replace(void) {
152 {
153 PurpleTrie *trie1, *trie2, *trie3; 153 PurpleTrie *trie1, *trie2, *trie3;
154 GSList *tries = NULL; 154 GSList *tries = NULL;
155 const gchar *in; 155 const gchar *in;
156 gchar *out; 156 gchar *out;
157 157
183 in = "test tester trie trie1 trie2 trie3 example Alice"; 183 in = "test tester trie trie1 trie2 trie3 example Alice";
184 184
185 out = purple_trie_multi_replace(tries, in, 185 out = purple_trie_multi_replace(tries, in,
186 test_trie_replace_cb, (gpointer)5); 186 test_trie_replace_cb, (gpointer)5);
187 187
188 assert_string_equal("[5:5011] [5:5011]er trie [5:5012] [5:5022] " 188 g_assert_cmpstr(
189 "[5:5032] [5:5023] [5:5035]ice", out); 189 "[5:5011] [5:5011]er trie [5:5012] [5:5022] "
190 "[5:5032] [5:5023] [5:5035]ice",
191 ==,
192 out
193 );
190 194
191 g_slist_free_full(tries, g_object_unref); 195 g_slist_free_full(tries, g_object_unref);
192 g_free(out); 196 g_free(out);
193 } 197 }
194 END_TEST 198
195 199 static void
196 START_TEST(test_trie_remove) 200 test_trie_remove(void) {
197 {
198 PurpleTrie *trie; 201 PurpleTrie *trie;
199 const gchar *in; 202 const gchar *in;
200 gchar *out; 203 gchar *out;
201 204
202 trie = purple_trie_new(); 205 trie = purple_trie_new();
209 212
210 in = "alice bob cherry"; 213 in = "alice bob cherry";
211 214
212 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)6); 215 out = purple_trie_replace(trie, in, test_trie_replace_cb, (gpointer)6);
213 216
214 assert_string_equal("[6:6001] bob [6:6003]", out); 217 g_assert_cmpstr("[6:6001] bob [6:6003]", ==, out);
215 218
216 g_object_unref(trie); 219 g_object_unref(trie);
217 g_free(out); 220 g_free(out);
218 } 221 }
219 END_TEST 222
220 223 static void
221 START_TEST(test_trie_find) 224 test_trie_find_normal(void) {
222 {
223 PurpleTrie *trie; 225 PurpleTrie *trie;
224 const gchar *in; 226 const gchar *in;
225 gint out; 227 gint out;
226 228
227 trie = purple_trie_new(); 229 trie = purple_trie_new();
234 in = "test alice bob test cherry alice"; 236 in = "test alice bob test cherry alice";
235 237
236 find_sum = 0; 238 find_sum = 0;
237 out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)7); 239 out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)7);
238 240
239 assert_int_equal(4, out); 241 g_assert_cmpint(4, ==, out);
240 assert_int_equal(2*1 + 2 + 3, find_sum); 242 g_assert_cmpint(2 * 1 + 2 + 3, ==, find_sum);
241 243
242 g_object_unref(trie); 244 g_object_unref(trie);
243 } 245 }
244 END_TEST 246
245 247 static void
246 START_TEST(test_trie_find_reset) 248 test_trie_find_reset(void) {
247 {
248 PurpleTrie *trie; 249 PurpleTrie *trie;
249 const gchar *in; 250 const gchar *in;
250 gint out; 251 gint out;
251 252
252 trie = purple_trie_new(); 253 trie = purple_trie_new();
259 in = "al ali alice"; 260 in = "al ali alice";
260 261
261 find_sum = 0; 262 find_sum = 0;
262 out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)8); 263 out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)8);
263 264
264 assert_int_equal(3, out); 265 g_assert_cmpint(3, ==, out);
265 assert_int_equal(3 * 3, find_sum); 266 g_assert_cmpint(3 * 3, ==, find_sum);
266 267
267 g_object_unref(trie); 268 g_object_unref(trie);
268 } 269 }
269 END_TEST 270
270 271 static void
271 START_TEST(test_trie_find_noreset) 272 test_trie_find_noreset(void) {
272 {
273 PurpleTrie *trie; 273 PurpleTrie *trie;
274 const gchar *in; 274 const gchar *in;
275 gint out; 275 gint out;
276 276
277 trie = purple_trie_new(); 277 trie = purple_trie_new();
284 in = "al ali alice"; 284 in = "al ali alice";
285 285
286 find_sum = 0; 286 find_sum = 0;
287 out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)9); 287 out = purple_trie_find(trie, in, test_trie_find_cb, (gpointer)9);
288 288
289 assert_int_equal(6, out); 289 g_assert_cmpint(6, ==, out);
290 assert_int_equal(3*3 + 2*2 + 1, find_sum); 290 g_assert_cmpint(3 * 3 + 2 * 2 + 1, ==, find_sum);
291 291
292 g_object_unref(trie); 292 g_object_unref(trie);
293 } 293 }
294 END_TEST 294
295 295 static void
296 START_TEST(test_trie_multi_find) 296 test_trie_multi_find(void) {
297 {
298 PurpleTrie *trie1, *trie2, *trie3; 297 PurpleTrie *trie1, *trie2, *trie3;
299 GSList *tries = NULL; 298 GSList *tries = NULL;
300 const gchar *in; 299 const gchar *in;
301 int out; 300 int out;
302 301
331 in = "test tester trie trie1 trie2 trie3 example Alice"; 330 in = "test tester trie trie1 trie2 trie3 example Alice";
332 331
333 out = purple_trie_multi_find(tries, in, 332 out = purple_trie_multi_find(tries, in,
334 test_trie_find_cb, (gpointer)0x10); 333 test_trie_find_cb, (gpointer)0x10);
335 334
336 assert_int_equal(9, out); 335 g_assert_cmpint(9, ==, out);
337 assert_int_equal(2 * 0x11 + 0x33 + 0x12 + 0x22 + 336 g_assert_cmpint(2 * 0x11 + 0x33 + 0x12 + 0x22 +
338 0x32 + 0x23 + 0x35 + 0x13, find_sum); 337 0x32 + 0x23 + 0x35 + 0x13, ==, find_sum);
339 338
340 g_slist_free_full(tries, g_object_unref); 339 g_slist_free_full(tries, g_object_unref);
341 } 340 }
342 END_TEST 341
343 342 gint
344 Suite * 343 main(gint argc, gchar **argv) {
345 purple_trie_suite(void) 344 g_test_init(&argc, &argv, NULL);
346 { 345
347 Suite *s = suite_create("PurpleTrie class"); 346 g_test_add_func("/trie/replace/normal",
348 347 test_trie_replace_normal);
349 TCase *tc = tcase_create("trie"); 348 g_test_add_func("/trie/replace/whole",
350 tcase_add_test(tc, test_trie_replace); 349 test_trie_replace_whole);
351 tcase_add_test(tc, test_trie_replace_whole); 350 g_test_add_func("/trie/replace/inner",
352 tcase_add_test(tc, test_trie_replace_inner); 351 test_trie_replace_inner);
353 tcase_add_test(tc, test_trie_replace_empty); 352 g_test_add_func("/trie/replace/empty",
354 tcase_add_test(tc, test_trie_multi_replace); 353 test_trie_replace_empty);
355 tcase_add_test(tc, test_trie_remove); 354
356 tcase_add_test(tc, test_trie_find); 355 g_test_add_func("/trie/multi_replace",
357 tcase_add_test(tc, test_trie_find_reset); 356 test_trie_multi_replace);
358 tcase_add_test(tc, test_trie_find_noreset); 357
359 tcase_add_test(tc, test_trie_multi_find); 358 g_test_add_func("/trie/remove",
360 359 test_trie_remove);
361 suite_add_tcase(s, tc); 360
362 361 g_test_add_func("/trie/find/normal",
363 return s; 362 test_trie_find_normal);
364 } 363 g_test_add_func("/trie/find/reset",
364 test_trie_find_reset);
365 g_test_add_func("/trie/find/noreset",
366 test_trie_find_noreset);
367
368 g_test_add_func("/trie/multi_find",
369 test_trie_multi_find);
370
371 return g_test_run();
372 }

mercurial