1.1 --- a/tests/test_tree.c Wed Feb 21 18:53:55 2024 +0100 1.2 +++ b/tests/test_tree.c Mon Feb 26 21:07:23 2024 +0100 1.3 @@ -30,6 +30,8 @@ 1.4 1.5 #include "cx/test.h" 1.6 1.7 +#include "util_allocator.h" 1.8 + 1.9 typedef struct tree_node { 1.10 struct tree_node *parent; 1.11 struct tree_node *next; 1.12 @@ -465,6 +467,46 @@ 1.13 free(actual); 1.14 } 1.15 1.16 +CX_TEST(test_tree_iterator_free_nodes) { 1.17 + CxTestingAllocator talloc; 1.18 + cx_testing_allocator_init(&talloc); 1.19 + CxAllocator *alloc = &talloc.base; 1.20 + CX_TEST_DO { 1.21 + tree_node *root = cxCalloc(alloc, 1, sizeof(tree_node)); 1.22 + tree_node *a = cxCalloc(alloc, 1, sizeof(tree_node)); 1.23 + tree_node *b = cxCalloc(alloc, 1, sizeof(tree_node)); 1.24 + tree_node *c = cxCalloc(alloc, 1, sizeof(tree_node)); 1.25 + tree_node *aa = cxCalloc(alloc, 1, sizeof(tree_node)); 1.26 + tree_node *ab = cxCalloc(alloc, 1, sizeof(tree_node)); 1.27 + tree_node *ba = cxCalloc(alloc, 1, sizeof(tree_node)); 1.28 + tree_node *ca = cxCalloc(alloc, 1, sizeof(tree_node)); 1.29 + tree_node *cb = cxCalloc(alloc, 1, sizeof(tree_node)); 1.30 + tree_node *cc = cxCalloc(alloc, 1, sizeof(tree_node)); 1.31 + tree_node *cba = cxCalloc(alloc, 1, sizeof(tree_node)); 1.32 + 1.33 + cx_tree_link(root, a, tree_node_layout); 1.34 + cx_tree_link(root, b, tree_node_layout); 1.35 + cx_tree_link(root, c, tree_node_layout); 1.36 + cx_tree_link(a, aa, tree_node_layout); 1.37 + cx_tree_link(a, ab, tree_node_layout); 1.38 + cx_tree_link(b, ba, tree_node_layout); 1.39 + cx_tree_link(c, ca, tree_node_layout); 1.40 + cx_tree_link(c, cb, tree_node_layout); 1.41 + cx_tree_link(c, cc, tree_node_layout); 1.42 + cx_tree_link(cb, cba, tree_node_layout); 1.43 + 1.44 + CxTreeIterator iter = cx_tree_iterator(root, true, tree_child_list); 1.45 + cx_foreach(tree_node *, node, iter) { 1.46 + if (iter.exiting) { 1.47 + cxFree(alloc,node); 1.48 + } 1.49 + } 1.50 + 1.51 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 1.52 + } 1.53 + cx_testing_allocator_destroy(&talloc); 1.54 +} 1.55 + 1.56 CxTestSuite *cx_test_suite_tree_low_level(void) { 1.57 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); 1.58 1.59 @@ -477,6 +519,7 @@ 1.60 cx_test_register(suite, test_tree_iterator_basic_only_enter); 1.61 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); 1.62 cx_test_register(suite, test_tree_iterator_xml); 1.63 + cx_test_register(suite, test_tree_iterator_free_nodes); 1.64 1.65 return suite; 1.66 }