Mon, 24 Nov 2025 22:38:50 +0100
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; }