1.1 --- a/tests/test_tree.c Mon Feb 19 22:12:13 2024 +0100 1.2 +++ b/tests/test_tree.c Wed Feb 21 18:32:38 2024 +0100 1.3 @@ -271,7 +271,7 @@ 1.4 } 1.5 } 1.6 1.7 -CX_TEST(test_tree_iterator_basic_test_only_enter) { 1.8 +CX_TEST(test_tree_iterator_basic_only_enter) { 1.9 tree_node root = {0}; 1.10 tree_node a = {0}; 1.11 tree_node b = {0}; 1.12 @@ -330,6 +330,64 @@ 1.13 } 1.14 } 1.15 1.16 +CX_TEST(test_tree_iterator_basic_enter_and_exit) { 1.17 + tree_node root = {0}; 1.18 + tree_node a = {0}; 1.19 + tree_node b = {0}; 1.20 + tree_node c = {0}; 1.21 + tree_node aa = {0}; 1.22 + tree_node ab = {0}; 1.23 + tree_node ba = {0}; 1.24 + tree_node ca = {0}; 1.25 + tree_node cb = {0}; 1.26 + tree_node cc = {0}; 1.27 + tree_node cba = {0}; 1.28 + 1.29 + cx_tree_link(&root, &a, tree_node_layout); 1.30 + cx_tree_link(&root, &b, tree_node_layout); 1.31 + cx_tree_link(&root, &c, tree_node_layout); 1.32 + cx_tree_link(&a, &aa, tree_node_layout); 1.33 + cx_tree_link(&a, &ab, tree_node_layout); 1.34 + cx_tree_link(&b, &ba, tree_node_layout); 1.35 + cx_tree_link(&c, &ca, tree_node_layout); 1.36 + cx_tree_link(&c, &cb, tree_node_layout); 1.37 + cx_tree_link(&c, &cc, tree_node_layout); 1.38 + cx_tree_link(&cb, &cba, tree_node_layout); 1.39 + CX_TEST_DO { 1.40 + CxTreeIterator iter = cx_tree_iterator(&root, true, tree_child_list); 1.41 + unsigned chk = 0; 1.42 + cx_foreach(tree_node*, node, iter) { 1.43 + CX_TEST_ASSERT(iter.exiting || node->data == 0); 1.44 + node->data++; 1.45 + chk++; 1.46 + CX_TEST_ASSERT(node == iter.node); 1.47 + if (node == &root) { 1.48 + CX_TEST_ASSERT(iter.depth == 1); 1.49 + } else if (node == &a || node == &b || node == &c) { 1.50 + CX_TEST_ASSERT(iter.depth == 2); 1.51 + } else if (node == &cba) { 1.52 + CX_TEST_ASSERT(iter.depth == 4); 1.53 + } else { 1.54 + CX_TEST_ASSERT(iter.depth == 3); 1.55 + } 1.56 + } 1.57 + CX_TEST_ASSERT(iter.counter == 11); 1.58 + CX_TEST_ASSERT(chk == 22); 1.59 + CX_TEST_ASSERT(iter.stack == NULL); 1.60 + CX_TEST_ASSERT(root.data == 2); 1.61 + CX_TEST_ASSERT(a.data == 2); 1.62 + CX_TEST_ASSERT(b.data == 2); 1.63 + CX_TEST_ASSERT(c.data == 2); 1.64 + CX_TEST_ASSERT(aa.data == 2); 1.65 + CX_TEST_ASSERT(ab.data == 2); 1.66 + CX_TEST_ASSERT(ba.data == 2); 1.67 + CX_TEST_ASSERT(ca.data == 2); 1.68 + CX_TEST_ASSERT(cb.data == 2); 1.69 + CX_TEST_ASSERT(cc.data == 2); 1.70 + CX_TEST_ASSERT(cba.data == 2); 1.71 + } 1.72 +} 1.73 + 1.74 CxTestSuite *cx_test_suite_tree_low_level(void) { 1.75 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); 1.76 1.77 @@ -339,7 +397,8 @@ 1.78 cx_test_register(suite, test_tree_unlink); 1.79 cx_test_register(suite, test_tree_search); 1.80 cx_test_register(suite, test_tree_iterator_create_and_dispose); 1.81 - cx_test_register(suite, test_tree_iterator_basic_test_only_enter); 1.82 + cx_test_register(suite, test_tree_iterator_basic_only_enter); 1.83 + cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); 1.84 1.85 return suite; 1.86 }