tests/test_tree.c

changeset 840
4f02995ce44e
parent 839
62d3aecc5bb7
child 845
2615317311b7
     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  }

mercurial