tests/test_tree.c

changeset 840
4f02995ce44e
parent 839
62d3aecc5bb7
child 845
2615317311b7
equal deleted inserted replaced
839:62d3aecc5bb7 840:4f02995ce44e
27 */ 27 */
28 28
29 #include "cx/tree.h" 29 #include "cx/tree.h"
30 30
31 #include "cx/test.h" 31 #include "cx/test.h"
32
33 #include "util_allocator.h"
32 34
33 typedef struct tree_node { 35 typedef struct tree_node {
34 struct tree_node *parent; 36 struct tree_node *parent;
35 struct tree_node *next; 37 struct tree_node *next;
36 struct tree_node *prev; 38 struct tree_node *prev;
463 CX_TEST_ASSERT(0 == strcmp(expected, actual)); 465 CX_TEST_ASSERT(0 == strcmp(expected, actual));
464 } 466 }
465 free(actual); 467 free(actual);
466 } 468 }
467 469
470 CX_TEST(test_tree_iterator_free_nodes) {
471 CxTestingAllocator talloc;
472 cx_testing_allocator_init(&talloc);
473 CxAllocator *alloc = &talloc.base;
474 CX_TEST_DO {
475 tree_node *root = cxCalloc(alloc, 1, sizeof(tree_node));
476 tree_node *a = cxCalloc(alloc, 1, sizeof(tree_node));
477 tree_node *b = cxCalloc(alloc, 1, sizeof(tree_node));
478 tree_node *c = cxCalloc(alloc, 1, sizeof(tree_node));
479 tree_node *aa = cxCalloc(alloc, 1, sizeof(tree_node));
480 tree_node *ab = cxCalloc(alloc, 1, sizeof(tree_node));
481 tree_node *ba = cxCalloc(alloc, 1, sizeof(tree_node));
482 tree_node *ca = cxCalloc(alloc, 1, sizeof(tree_node));
483 tree_node *cb = cxCalloc(alloc, 1, sizeof(tree_node));
484 tree_node *cc = cxCalloc(alloc, 1, sizeof(tree_node));
485 tree_node *cba = cxCalloc(alloc, 1, sizeof(tree_node));
486
487 cx_tree_link(root, a, tree_node_layout);
488 cx_tree_link(root, b, tree_node_layout);
489 cx_tree_link(root, c, tree_node_layout);
490 cx_tree_link(a, aa, tree_node_layout);
491 cx_tree_link(a, ab, tree_node_layout);
492 cx_tree_link(b, ba, tree_node_layout);
493 cx_tree_link(c, ca, tree_node_layout);
494 cx_tree_link(c, cb, tree_node_layout);
495 cx_tree_link(c, cc, tree_node_layout);
496 cx_tree_link(cb, cba, tree_node_layout);
497
498 CxTreeIterator iter = cx_tree_iterator(root, true, tree_child_list);
499 cx_foreach(tree_node *, node, iter) {
500 if (iter.exiting) {
501 cxFree(alloc,node);
502 }
503 }
504
505 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
506 }
507 cx_testing_allocator_destroy(&talloc);
508 }
509
468 CxTestSuite *cx_test_suite_tree_low_level(void) { 510 CxTestSuite *cx_test_suite_tree_low_level(void) {
469 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); 511 CxTestSuite *suite = cx_test_suite_new("tree (low level)");
470 512
471 cx_test_register(suite, test_tree_link_new_child); 513 cx_test_register(suite, test_tree_link_new_child);
472 cx_test_register(suite, test_tree_link_add_child); 514 cx_test_register(suite, test_tree_link_add_child);
475 cx_test_register(suite, test_tree_search); 517 cx_test_register(suite, test_tree_search);
476 cx_test_register(suite, test_tree_iterator_create_and_dispose); 518 cx_test_register(suite, test_tree_iterator_create_and_dispose);
477 cx_test_register(suite, test_tree_iterator_basic_only_enter); 519 cx_test_register(suite, test_tree_iterator_basic_only_enter);
478 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); 520 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit);
479 cx_test_register(suite, test_tree_iterator_xml); 521 cx_test_register(suite, test_tree_iterator_xml);
522 cx_test_register(suite, test_tree_iterator_free_nodes);
480 523
481 return suite; 524 return suite;
482 } 525 }

mercurial