tests/test_tree.c

changeset 1549
72ad8a78378a
parent 1511
3985ca9b18e0
equal deleted inserted replaced
1548:12315ee158ad 1549:72ad8a78378a
73 } 73 }
74 74
75 static void *tree_node_file_create_hl( 75 static void *tree_node_file_create_hl(
76 const void *dptr, 76 const void *dptr,
77 void *tree) { 77 void *tree) {
78 return tree_node_file_create(dptr, (void*)((CxTree*)tree)->allocator); 78 return tree_node_file_create(dptr, (void*)((CxTree*)tree)->collection.allocator);
79 } 79 }
80 80
81 static int tree_node_file_search(const void *l, const void *r) { 81 static int tree_node_file_search(const void *l, const void *r) {
82 const tree_node_file *left = l; 82 const tree_node_file *left = l;
83 const tree_node_file *right = r; 83 const tree_node_file *right = r;
1886 tree_node_file_search, 1886 tree_node_file_search,
1887 tree_node_file_search_data, 1887 tree_node_file_search_data,
1888 tree_node_file_layout 1888 tree_node_file_layout
1889 ); 1889 );
1890 CX_TEST_ASSERT(tree->cl != NULL); 1890 CX_TEST_ASSERT(tree->cl != NULL);
1891 CX_TEST_ASSERT(tree->allocator == &talloc.base); 1891 CX_TEST_ASSERT(tree->collection.allocator == &talloc.base);
1892 CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl); 1892 CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl);
1893 CX_TEST_ASSERT(tree->search == tree_node_file_search); 1893 CX_TEST_ASSERT(tree->search == tree_node_file_search);
1894 CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data); 1894 CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data);
1895 CX_TEST_ASSERT(tree->size == 0); 1895 CX_TEST_ASSERT(tree->collection.size == 0);
1896 CX_TEST_ASSERT(tree->simple_destructor == NULL); 1896 CX_TEST_ASSERT(tree->collection.simple_destructor == NULL);
1897 CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); 1897 CX_TEST_ASSERT(tree->collection.advanced_destructor == (cx_destructor_func2) cxFree);
1898 CX_TEST_ASSERT(tree->destructor_data == &talloc.base); 1898 CX_TEST_ASSERT(tree->collection.destructor_data == &talloc.base);
1899 CX_TEST_ASSERT(tree->collection.store_pointer == false);
1900 CX_TEST_ASSERT(tree->collection.sorted == false);
1899 CX_TEST_ASSERT(tree->root == NULL); 1901 CX_TEST_ASSERT(tree->root == NULL);
1900 CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node_file, parent)); 1902 CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node_file, parent));
1901 CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node_file, children)); 1903 CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node_file, children));
1902 CX_TEST_ASSERT(tree->loc_last_child == offsetof(tree_node_file, last_child)); 1904 CX_TEST_ASSERT(tree->loc_last_child == offsetof(tree_node_file, last_child));
1903 CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node_file, prev)); 1905 CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node_file, prev));
1919 tree_node_file_create_hl, 1921 tree_node_file_create_hl,
1920 tree_node_file_search, 1922 tree_node_file_search,
1921 tree_node_file_search_data 1923 tree_node_file_search_data
1922 ); 1924 );
1923 CX_TEST_ASSERT(tree->cl != NULL); 1925 CX_TEST_ASSERT(tree->cl != NULL);
1924 CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); 1926 CX_TEST_ASSERT(tree->collection.allocator == cxDefaultAllocator);
1925 CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl); 1927 CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl);
1926 CX_TEST_ASSERT(tree->search == tree_node_file_search); 1928 CX_TEST_ASSERT(tree->search == tree_node_file_search);
1927 CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data); 1929 CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data);
1928 CX_TEST_ASSERT(tree->size == 0); 1930 CX_TEST_ASSERT(tree->collection.size == 0);
1929 CX_TEST_ASSERT(tree->simple_destructor == NULL); 1931 CX_TEST_ASSERT(tree->collection.simple_destructor == NULL);
1930 CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); 1932 CX_TEST_ASSERT(tree->collection.advanced_destructor == (cx_destructor_func2) cxFree);
1931 CX_TEST_ASSERT(tree->destructor_data == cxDefaultAllocator); 1933 CX_TEST_ASSERT(tree->collection.destructor_data == cxDefaultAllocator);
1932 CX_TEST_ASSERT(tree->root == NULL); 1934 CX_TEST_ASSERT(tree->root == NULL);
1933 CX_TEST_ASSERT(tree->loc_parent == offsetof(struct cx_tree_node_base_s, parent)); 1935 CX_TEST_ASSERT(tree->loc_parent == offsetof(struct cx_tree_node_base_s, parent));
1934 CX_TEST_ASSERT(tree->loc_children == offsetof(struct cx_tree_node_base_s, children)); 1936 CX_TEST_ASSERT(tree->loc_children == offsetof(struct cx_tree_node_base_s, children));
1935 CX_TEST_ASSERT(tree->loc_last_child == offsetof(struct cx_tree_node_base_s, last_child)); 1937 CX_TEST_ASSERT(tree->loc_last_child == offsetof(struct cx_tree_node_base_s, last_child));
1936 CX_TEST_ASSERT(tree->loc_prev == offsetof(struct cx_tree_node_base_s, prev)); 1938 CX_TEST_ASSERT(tree->loc_prev == offsetof(struct cx_tree_node_base_s, prev));
1945 cx_tree_link(&root, &child2, tree_node_layout); 1947 cx_tree_link(&root, &child2, tree_node_layout);
1946 cx_tree_link(&child1, &child3, tree_node_layout); 1948 cx_tree_link(&child1, &child3, tree_node_layout);
1947 CX_TEST_DO { 1949 CX_TEST_DO {
1948 CxTree *tree = cxTreeCreateWrapped(NULL, &root, tree_node_layout); 1950 CxTree *tree = cxTreeCreateWrapped(NULL, &root, tree_node_layout);
1949 CX_TEST_ASSERT(tree->cl != NULL); 1951 CX_TEST_ASSERT(tree->cl != NULL);
1950 CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); 1952 CX_TEST_ASSERT(tree->collection.allocator == cxDefaultAllocator);
1951 CX_TEST_ASSERT(tree->node_create == NULL); 1953 CX_TEST_ASSERT(tree->node_create == NULL);
1952 CX_TEST_ASSERT(tree->search == NULL); 1954 CX_TEST_ASSERT(tree->search == NULL);
1953 CX_TEST_ASSERT(tree->search_data == NULL); 1955 CX_TEST_ASSERT(tree->search_data == NULL);
1954 CX_TEST_ASSERT(tree->root == &root); 1956 CX_TEST_ASSERT(tree->root == &root);
1955 CX_TEST_ASSERT(tree->size == 4); 1957 CX_TEST_ASSERT(tree->collection.size == 4);
1956 CX_TEST_ASSERT(tree->simple_destructor == NULL); 1958 CX_TEST_ASSERT(tree->collection.simple_destructor == NULL);
1957 CX_TEST_ASSERT(tree->advanced_destructor == NULL); 1959 CX_TEST_ASSERT(tree->collection.advanced_destructor == NULL);
1958 CX_TEST_ASSERT(tree->destructor_data == NULL); 1960 CX_TEST_ASSERT(tree->collection.destructor_data == NULL);
1959 CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node, parent)); 1961 CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node, parent));
1960 CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node, children)); 1962 CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node, children));
1961 CX_TEST_ASSERT(tree->loc_last_child == -1); 1963 CX_TEST_ASSERT(tree->loc_last_child == -1);
1962 CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node, prev)); 1964 CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node, prev));
1963 CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node, next)); 1965 CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node, next));
2183 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2185 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
2184 2186
2185 cxFree(alloc, usr); 2187 cxFree(alloc, usr);
2186 // for the subtree, we use a little trick and wrap it in a new tree 2188 // for the subtree, we use a little trick and wrap it in a new tree
2187 CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout); 2189 CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout);
2188 foo_tree->allocator = alloc; 2190 foo_tree->collection.allocator = alloc;
2189 foo_tree->advanced_destructor = (cx_destructor_func2 ) cxFree; 2191 cxDefineAdvancedDestructor(foo_tree, cxFree, alloc);
2190 foo_tree->destructor_data = alloc;
2191 cxTreeFree(foo_tree); 2192 cxTreeFree(foo_tree);
2192 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2193 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
2193 } 2194 }
2194 cx_testing_allocator_destroy(&talloc); 2195 cx_testing_allocator_destroy(&talloc);
2195 } 2196 }
2303 CX_TEST_ASSERT(tree->root == NULL); 2304 CX_TEST_ASSERT(tree->root == NULL);
2304 CX_TEST_ASSERT(cxTreeDepth(tree) == 0); 2305 CX_TEST_ASSERT(cxTreeDepth(tree) == 0);
2305 cxTreeFree(tree); 2306 cxTreeFree(tree);
2306 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2307 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
2307 CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout); 2308 CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout);
2308 w->advanced_destructor = (cx_destructor_func2) cxFree; 2309 cxDefineAdvancedDestructor(w, cxFree, alloc);
2309 w->destructor_data = alloc;
2310 cxTreeDestroySubtree(w, w->root); 2310 cxTreeDestroySubtree(w, w->root);
2311 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2311 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
2312 cxTreeFree(w); 2312 cxTreeFree(w);
2313 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2313 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
2314 } 2314 }
2324 cx_tree_link(&root, &child1, tree_node_layout); 2324 cx_tree_link(&root, &child1, tree_node_layout);
2325 cx_tree_link(&root, &child2, tree_node_layout); 2325 cx_tree_link(&root, &child2, tree_node_layout);
2326 cx_tree_link(&child1, &child3, tree_node_layout); 2326 cx_tree_link(&child1, &child3, tree_node_layout);
2327 CX_TEST_DO { 2327 CX_TEST_DO {
2328 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); 2328 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout);
2329 tree->simple_destructor = test_tree_high_simple_destructor_func; 2329 cxDefineDestructor(tree,test_tree_high_simple_destructor_func);
2330 cxTreeDestroyNode(tree, &child1, NULL); 2330 cxTreeDestroyNode(tree, &child1, NULL);
2331 cxTreeFree(tree); 2331 cxTreeFree(tree);
2332 CX_TEST_ASSERT(root.data == 1); 2332 CX_TEST_ASSERT(root.data == 1);
2333 CX_TEST_ASSERT(child1.data == 1); 2333 CX_TEST_ASSERT(child1.data == 1);
2334 CX_TEST_ASSERT(child2.data == 1); 2334 CX_TEST_ASSERT(child2.data == 1);

mercurial