tests/test_tree.c

changeset 993
b642eca4b956
parent 985
68754c7de906
equal deleted inserted replaced
992:14ca894190fd 993:b642eca4b956
1770 CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node_file, next)); 1770 CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node_file, next));
1771 1771
1772 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 1772 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
1773 CX_TEST_ASSERT(talloc.alloc_total == 1); 1773 CX_TEST_ASSERT(talloc.alloc_total == 1);
1774 1774
1775 cxTreeDestroy(tree); 1775 cxTreeFree(tree);
1776 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 1776 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
1777 } 1777 }
1778 cx_testing_allocator_destroy(&talloc); 1778 cx_testing_allocator_destroy(&talloc);
1779 } 1779 }
1780 1780
1799 CX_TEST_ASSERT(tree->loc_parent == offsetof(struct cx_tree_node_base_s, parent)); 1799 CX_TEST_ASSERT(tree->loc_parent == offsetof(struct cx_tree_node_base_s, parent));
1800 CX_TEST_ASSERT(tree->loc_children == offsetof(struct cx_tree_node_base_s, children)); 1800 CX_TEST_ASSERT(tree->loc_children == offsetof(struct cx_tree_node_base_s, children));
1801 CX_TEST_ASSERT(tree->loc_last_child == offsetof(struct cx_tree_node_base_s, last_child)); 1801 CX_TEST_ASSERT(tree->loc_last_child == offsetof(struct cx_tree_node_base_s, last_child));
1802 CX_TEST_ASSERT(tree->loc_prev == offsetof(struct cx_tree_node_base_s, prev)); 1802 CX_TEST_ASSERT(tree->loc_prev == offsetof(struct cx_tree_node_base_s, prev));
1803 CX_TEST_ASSERT(tree->loc_next == offsetof(struct cx_tree_node_base_s, next)); 1803 CX_TEST_ASSERT(tree->loc_next == offsetof(struct cx_tree_node_base_s, next));
1804 cxTreeDestroy(tree); 1804 cxTreeFree(tree);
1805 } 1805 }
1806 } 1806 }
1807 1807
1808 CX_TEST(test_tree_high_create_wrapped) { 1808 CX_TEST(test_tree_high_create_wrapped) {
1809 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; 1809 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0};
1825 CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node, parent)); 1825 CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node, parent));
1826 CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node, children)); 1826 CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node, children));
1827 CX_TEST_ASSERT(tree->loc_last_child == -1); 1827 CX_TEST_ASSERT(tree->loc_last_child == -1);
1828 CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node, prev)); 1828 CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node, prev));
1829 CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node, next)); 1829 CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node, next));
1830 cxTreeDestroy(tree); 1830 cxTreeFree(tree);
1831 } 1831 }
1832 } 1832 }
1833 1833
1834 CX_TEST(test_tree_high_tree_depth) { 1834 CX_TEST(test_tree_high_tree_depth) {
1835 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; 1835 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0};
1850 tree_node_file_search, 1850 tree_node_file_search,
1851 tree_node_file_search_data, 1851 tree_node_file_search_data,
1852 tree_node_file_layout 1852 tree_node_file_layout
1853 ); 1853 );
1854 CX_TEST_ASSERT(cxTreeDepth(empty) == 0); 1854 CX_TEST_ASSERT(cxTreeDepth(empty) == 0);
1855 cxTreeDestroy(empty); 1855 cxTreeFree(empty);
1856 } 1856 }
1857 cxTreeDestroy(tree); 1857 cxTreeFree(tree);
1858 } 1858 }
1859 1859
1860 CX_TEST(test_tree_high_set_parent) { 1860 CX_TEST(test_tree_high_set_parent) {
1861 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; 1861 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0};
1862 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); 1862 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout);
1882 tree_node_file_search, 1882 tree_node_file_search,
1883 tree_node_file_search_data, 1883 tree_node_file_search_data,
1884 tree_node_file_layout 1884 tree_node_file_layout
1885 ); 1885 );
1886 CX_TEST_ASSERT(cxTreeDepth(empty) == 0); 1886 CX_TEST_ASSERT(cxTreeDepth(empty) == 0);
1887 cxTreeDestroy(empty); 1887 cxTreeFree(empty);
1888 } 1888 }
1889 cxTreeDestroy(tree); 1889 cxTreeFree(tree);
1890 } 1890 }
1891 1891
1892 CX_TEST(test_tree_high_insert_one) { 1892 CX_TEST(test_tree_high_insert_one) {
1893 CxTestingAllocator talloc; 1893 CxTestingAllocator talloc;
1894 cx_testing_allocator_init(&talloc); 1894 cx_testing_allocator_init(&talloc);
1914 CX_TEST_ASSERT(tree->size == 6); 1914 CX_TEST_ASSERT(tree->size == 6);
1915 1915
1916 CX_TEST_ASSERT(talloc.alloc_total == 8); 1916 CX_TEST_ASSERT(talloc.alloc_total == 8);
1917 CX_TEST_ASSERT(talloc.free_total == 1); // the one that could not be added 1917 CX_TEST_ASSERT(talloc.free_total == 1); // the one that could not be added
1918 1918
1919 cxTreeDestroy(tree); 1919 cxTreeFree(tree);
1920 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 1920 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
1921 } 1921 }
1922 cx_testing_allocator_destroy(&talloc); 1922 cx_testing_allocator_destroy(&talloc);
1923 } 1923 }
1924 1924
1947 CX_TEST_ASSERT(tree->size == 6); 1947 CX_TEST_ASSERT(tree->size == 6);
1948 1948
1949 CX_TEST_ASSERT(talloc.alloc_total == 8); 1949 CX_TEST_ASSERT(talloc.alloc_total == 8);
1950 CX_TEST_ASSERT(talloc.free_total == 1); // the one that could not be added 1950 CX_TEST_ASSERT(talloc.free_total == 1); // the one that could not be added
1951 1951
1952 cxTreeDestroy(tree); 1952 cxTreeFree(tree);
1953 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 1953 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
1954 } 1954 }
1955 cx_testing_allocator_destroy(&talloc); 1955 cx_testing_allocator_destroy(&talloc);
1956 } 1956 }
1957 1957
2042 CX_TEST_ASSERT(relinked_lib != NULL); 2042 CX_TEST_ASSERT(relinked_lib != NULL);
2043 CX_TEST_ASSERT(relinked_lib->parent == tree->root); 2043 CX_TEST_ASSERT(relinked_lib->parent == tree->root);
2044 CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/")); 2044 CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/"));
2045 2045
2046 2046
2047 cxTreeDestroy(tree); 2047 cxTreeFree(tree);
2048 // we are not done yet, because we need to free the removed stuff 2048 // we are not done yet, because we need to free the removed stuff
2049 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2049 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
2050 2050
2051 cxFree(alloc, usr); 2051 cxFree(alloc, usr);
2052 // for the subtree, we use a little trick and wrap it in a new tree 2052 // for the subtree, we use a little trick and wrap it in a new tree
2053 CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout); 2053 CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout);
2054 foo_tree->allocator = alloc; 2054 foo_tree->allocator = alloc;
2055 foo_tree->advanced_destructor = (cx_destructor_func2 ) cxFree; 2055 foo_tree->advanced_destructor = (cx_destructor_func2 ) cxFree;
2056 foo_tree->destructor_data = alloc; 2056 foo_tree->destructor_data = alloc;
2057 cxTreeDestroy(foo_tree); 2057 cxTreeFree(foo_tree);
2058 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2058 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
2059 } 2059 }
2060 cx_testing_allocator_destroy(&talloc); 2060 cx_testing_allocator_destroy(&talloc);
2061 } 2061 }
2062 2062
2127 CX_TEST_ASSERT(relinked_share->parent == tree->root); 2127 CX_TEST_ASSERT(relinked_share->parent == tree->root);
2128 CX_TEST_ASSERT(relinked_lib != NULL); 2128 CX_TEST_ASSERT(relinked_lib != NULL);
2129 CX_TEST_ASSERT(relinked_lib->parent == tree->root); 2129 CX_TEST_ASSERT(relinked_lib->parent == tree->root);
2130 CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/")); 2130 CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/"));
2131 2131
2132 cxTreeDestroy(tree); 2132 cxTreeFree(tree);
2133 // all memory should be free when using destroy instead of remove 2133 // all memory should be free when using destroy instead of remove
2134 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2134 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
2135 } 2135 }
2136 cx_testing_allocator_destroy(&talloc); 2136 cx_testing_allocator_destroy(&talloc);
2137 } 2137 }
2166 CX_TEST_ASSERT(tree->size == 6); 2166 CX_TEST_ASSERT(tree->size == 6);
2167 cxTreeRemoveSubtree(tree, root); 2167 cxTreeRemoveSubtree(tree, root);
2168 CX_TEST_ASSERT(tree->size == 0); 2168 CX_TEST_ASSERT(tree->size == 0);
2169 CX_TEST_ASSERT(tree->root == NULL); 2169 CX_TEST_ASSERT(tree->root == NULL);
2170 CX_TEST_ASSERT(cxTreeDepth(tree) == 0); 2170 CX_TEST_ASSERT(cxTreeDepth(tree) == 0);
2171 cxTreeDestroy(tree); 2171 cxTreeFree(tree);
2172 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2172 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
2173 CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout); 2173 CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout);
2174 w->advanced_destructor = (cx_destructor_func2) cxFree; 2174 w->advanced_destructor = (cx_destructor_func2) cxFree;
2175 w->destructor_data = alloc; 2175 w->destructor_data = alloc;
2176 cxTreeDestroySubtree(w, w->root); 2176 cxTreeDestroySubtree(w, w->root);
2177 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2177 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
2178 cxTreeDestroy(w); 2178 cxTreeFree(w);
2179 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2179 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
2180 } 2180 }
2181 cx_testing_allocator_destroy(&talloc); 2181 cx_testing_allocator_destroy(&talloc);
2182 } 2182 }
2183 2183
2192 cx_tree_link(&child1, &child3, tree_node_layout); 2192 cx_tree_link(&child1, &child3, tree_node_layout);
2193 CX_TEST_DO { 2193 CX_TEST_DO {
2194 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); 2194 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout);
2195 tree->simple_destructor = test_tree_high_simple_destructor_func; 2195 tree->simple_destructor = test_tree_high_simple_destructor_func;
2196 cxTreeDestroyNode(tree, &child1, NULL); 2196 cxTreeDestroyNode(tree, &child1, NULL);
2197 cxTreeDestroy(tree); 2197 cxTreeFree(tree);
2198 CX_TEST_ASSERT(root.data == 1); 2198 CX_TEST_ASSERT(root.data == 1);
2199 CX_TEST_ASSERT(child1.data == 1); 2199 CX_TEST_ASSERT(child1.data == 1);
2200 CX_TEST_ASSERT(child2.data == 1); 2200 CX_TEST_ASSERT(child2.data == 1);
2201 CX_TEST_ASSERT(child3.data == 1); 2201 CX_TEST_ASSERT(child3.data == 1);
2202 } 2202 }

mercurial