complete test coverage for tree.c

Mon, 24 Nov 2025 22:38:50 +0100

author
Mike Becker <universe@uap-core.de>
date
Mon, 24 Nov 2025 22:38:50 +0100
changeset 1511
3985ca9b18e0
parent 1510
89cf6b4a5792
child 1512
0dc866c7863b

complete test coverage for tree.c

tests/test_tree.c file | annotate | diff | comparison | revisions
--- a/tests/test_tree.c	Mon Nov 24 22:15:16 2025 +0100
+++ b/tests/test_tree.c	Mon Nov 24 22:38:50 2025 +0100
@@ -2336,6 +2336,86 @@
     }
 }
 
+CX_TEST(test_tree_high_iterator) {
+    CxTree *tree = cxTreeCreate(
+        NULL, tree_node_file_create_hl,
+        tree_node_file_search, tree_node_file_search_data,
+        tree_node_file_layout
+    );
+    cxTreeInsert(tree, "/");
+    cxTreeInsert(tree, "/etc");
+    cxTreeInsert(tree, "/home");
+    cxTreeInsert(tree, "/home/jane");
+    cxTreeInsert(tree, "/usr");
+    cxTreeInsert(tree, "/usr/local");
+    cxTreeInsert(tree, "/usr/local/lib");
+    cxTreeInsert(tree, "/var");
+    cxTreeInsert(tree, "/var/lib");
+    CX_TEST_DO {
+        const char *expected_order[] = {
+            "/",
+            "/etc",
+            "/home",
+            "/home/jane",
+            "/usr",
+            "/usr/local",
+            "/usr/local/lib",
+            "/var",
+            "/var/lib",
+        };
+        const char *actual_order[9];
+        CxTreeIterator iter = cxTreeIterate(tree, false);
+        cx_foreach(tree_node_file*, p, iter) {
+            actual_order[iter.counter-1] = p->path;
+        }
+        CX_TEST_ASSERT(iter.counter == 9);
+        for (unsigned i = 0; i < 9; i++) {
+            CX_TEST_ASSERT(strcmp(expected_order[i], actual_order[i]) == 0);
+        }
+    }
+    cxTreeFree(tree);
+}
+
+CX_TEST(test_tree_high_visitor) {
+    CxTree *tree = cxTreeCreate(
+        NULL, tree_node_file_create_hl,
+        tree_node_file_search, tree_node_file_search_data,
+        tree_node_file_layout
+    );
+    cxTreeInsert(tree, "/");
+    cxTreeInsert(tree, "/etc");
+    cxTreeInsert(tree, "/home");
+    cxTreeInsert(tree, "/home/jane");
+    cxTreeInsert(tree, "/usr");
+    cxTreeInsert(tree, "/usr/local");
+    cxTreeInsert(tree, "/usr/local/lib");
+    cxTreeInsert(tree, "/var");
+    cxTreeInsert(tree, "/var/lib");
+    CX_TEST_DO {
+        const char *expected_order[] = {
+            "/",
+            "/etc",
+            "/home",
+            "/usr",
+            "/var",
+            "/home/jane",
+            "/usr/local",
+            "/var/lib",
+            "/usr/local/lib",
+        };
+        const char *actual_order[9];
+        CxTreeVisitor iter = cxTreeVisit(tree);
+        cx_foreach(tree_node_file*, p, iter) {
+            actual_order[iter.counter-1] = p->path;
+        }
+        CX_TEST_ASSERT(iter.counter == 9);
+        for (unsigned i = 0; i < 9; i++) {
+            CX_TEST_ASSERT(strcmp(expected_order[i], actual_order[i]) == 0);
+        }
+    }
+    cxTreeFree(tree);
+}
+
 CxTestSuite *cx_test_suite_tree_low_level(void) {
     CxTestSuite *suite = cx_test_suite_new("tree (low level)");
 
@@ -2392,6 +2472,8 @@
     cx_test_register(suite, test_tree_high_add_find_destroy_nodes);
     cx_test_register(suite, test_tree_high_remove_or_destroy_root);
     cx_test_register(suite, test_tree_high_simple_destructor);
+    cx_test_register(suite, test_tree_high_iterator);
+    cx_test_register(suite, test_tree_high_visitor);
 
     return suite;
 }

mercurial