tests/test_tree.c

changeset 918
ec1f2015ec79
parent 916
526ed389c3d2
--- a/tests/test_tree.c	Sun Oct 06 19:02:32 2024 +0200
+++ b/tests/test_tree.c	Sun Oct 06 19:17:41 2024 +0200
@@ -1675,6 +1675,38 @@
     cxTreeDestroy(tree);
 }
 
+CX_TEST(test_tree_high_set_parent) {
+    tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0};
+    CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout);
+    CX_TEST_DO {
+        cxTreeSetParent(tree, &root, &child1);
+        cxTreeSetParent(tree, &root, &child2);
+        cxTreeSetParent(tree, &child1, &child3);
+        CX_TEST_ASSERT(cxTreeDepth(tree) == 3);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1);
+
+        cxTreeSetParent(tree, &child2, &child3);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 1);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 2);
+        CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1);
+
+        CxTree *empty = cxTreeCreate(
+                cxDefaultAllocator,
+                tree_node_file_create_hl,
+                tree_node_file_search,
+                tree_node_file_search_data,
+                tree_node_file_layout
+        );
+        CX_TEST_ASSERT(cxTreeDepth(empty) == 0);
+        cxTreeDestroy(empty);
+    }
+    cxTreeDestroy(tree);
+}
+
 CX_TEST(test_tree_high_insert_one) {
     CxTestingAllocator talloc;
     cx_testing_allocator_init(&talloc);
@@ -2032,6 +2064,7 @@
     cx_test_register(suite, test_tree_high_create_simple);
     cx_test_register(suite, test_tree_high_create_wrapped);
     cx_test_register(suite, test_tree_high_tree_depth);
+    cx_test_register(suite, test_tree_high_set_parent);
     cx_test_register(suite, test_tree_high_insert_one);
     cx_test_register(suite, test_tree_high_insert_many);
     cx_test_register(suite, test_tree_high_add_find_remove_nodes);

mercurial