tests/test_tree.c

changeset 836
2672a2f79484
parent 833
5c926801f052
child 837
7c15fea5cbea
equal deleted inserted replaced
835:13068743197f 836:2672a2f79484
248 CX_TEST_ASSERT(r > 0); 248 CX_TEST_ASSERT(r > 0);
249 CX_TEST_ASSERT(n == &cc); 249 CX_TEST_ASSERT(n == &cc);
250 } 250 }
251 } 251 }
252 252
253 CX_TEST(test_tree_iterator_create) { 253 CX_TEST(test_tree_iterator_create_and_dispose) {
254 tree_node root; 254 tree_node root;
255 CX_TEST_DO { 255 CX_TEST_DO {
256 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_child_list); 256 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_child_list);
257 CX_TEST_ASSERT(!iter.visit_on_exit); 257 CX_TEST_ASSERT(!iter.visit_on_exit);
258 CX_TEST_ASSERT(!iter.exiting); 258 CX_TEST_ASSERT(!iter.exiting);
264 CX_TEST_ASSERT(iter.stack_capacity > 0); 264 CX_TEST_ASSERT(iter.stack_capacity > 0);
265 CX_TEST_ASSERT(iter.stack_size == 1); 265 CX_TEST_ASSERT(iter.stack_size == 1);
266 CX_TEST_ASSERT(iter.depth == 1); 266 CX_TEST_ASSERT(iter.depth == 1);
267 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next)); 267 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next));
268 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children)); 268 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children));
269 cxTreeIteratorDispose(&iter);
270 CX_TEST_ASSERT(iter.stack == NULL);
271 }
272 }
273
274 CX_TEST(test_tree_iterator_basic_test_only_enter) {
275 tree_node root = {0};
276 tree_node a = {0};
277 tree_node b = {0};
278 tree_node c = {0};
279 tree_node aa = {0};
280 tree_node ab = {0};
281 tree_node ba = {0};
282 tree_node ca = {0};
283 tree_node cb = {0};
284 tree_node cc = {0};
285 tree_node cba = {0};
286
287 cx_tree_link(&root, &a, tree_node_layout);
288 cx_tree_link(&root, &b, tree_node_layout);
289 cx_tree_link(&root, &c, tree_node_layout);
290 cx_tree_link(&a, &aa, tree_node_layout);
291 cx_tree_link(&a, &ab, tree_node_layout);
292 cx_tree_link(&b, &ba, tree_node_layout);
293 cx_tree_link(&c, &ca, tree_node_layout);
294 cx_tree_link(&c, &cb, tree_node_layout);
295 cx_tree_link(&c, &cc, tree_node_layout);
296 cx_tree_link(&cb, &cba, tree_node_layout);
297 CX_TEST_DO {
298 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_child_list);
299 unsigned chk = 0;
300 cx_foreach(tree_node*, node, iter) {
301 CX_TEST_ASSERT(node->data == 0);
302 node->data++;
303 chk++;
304 CX_TEST_ASSERT(node == iter.node);
305 CX_TEST_ASSERT(!iter.exiting);
306 }
307 CX_TEST_ASSERT(iter.counter == 11);
308 CX_TEST_ASSERT(chk == 11);
309 CX_TEST_ASSERT(iter.stack == NULL);
310 CX_TEST_ASSERT(root.data == 1);
311 CX_TEST_ASSERT(a.data == 1);
312 CX_TEST_ASSERT(b.data == 1);
313 CX_TEST_ASSERT(c.data == 1);
314 CX_TEST_ASSERT(aa.data == 1);
315 CX_TEST_ASSERT(ab.data == 1);
316 CX_TEST_ASSERT(ba.data == 1);
317 CX_TEST_ASSERT(ca.data == 1);
318 CX_TEST_ASSERT(cb.data == 1);
319 CX_TEST_ASSERT(cc.data == 1);
320 CX_TEST_ASSERT(cba.data == 1);
269 } 321 }
270 } 322 }
271 323
272 CxTestSuite *cx_test_suite_tree_low_level(void) { 324 CxTestSuite *cx_test_suite_tree_low_level(void) {
273 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); 325 CxTestSuite *suite = cx_test_suite_new("tree (low level)");
275 cx_test_register(suite, test_tree_link_new_child); 327 cx_test_register(suite, test_tree_link_new_child);
276 cx_test_register(suite, test_tree_link_add_child); 328 cx_test_register(suite, test_tree_link_add_child);
277 cx_test_register(suite, test_tree_link_move_to_other_parent); 329 cx_test_register(suite, test_tree_link_move_to_other_parent);
278 cx_test_register(suite, test_tree_unlink); 330 cx_test_register(suite, test_tree_unlink);
279 cx_test_register(suite, test_tree_search); 331 cx_test_register(suite, test_tree_search);
280 cx_test_register(suite, test_tree_iterator_create); 332 cx_test_register(suite, test_tree_iterator_create_and_dispose);
333 cx_test_register(suite, test_tree_iterator_basic_test_only_enter);
281 334
282 return suite; 335 return suite;
283 } 336 }

mercurial