| 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 } |