1.1 --- a/test/avl_tests.c Mon May 18 19:49:03 2015 +0200 1.2 +++ b/test/avl_tests.c Mon May 18 19:52:03 2015 +0200 1.3 @@ -142,3 +142,69 @@ 1.4 ucx_avl_free(tree4); 1.5 ucx_avl_free(tree5); 1.6 } 1.7 + 1.8 +UCX_TEST(test_ucx_avl_remove) { 1.9 + UcxAVLTree *tree1 = ucx_avl_new(ucx_ptrcmp); 1.10 + UcxAVLTree *tree2 = ucx_avl_new(ucx_ptrcmp); 1.11 + UcxAVLTree *tree3 = ucx_avl_new(ucx_ptrcmp); 1.12 + UcxAVLTree *tree4 = ucx_avl_new(ucx_ptrcmp); 1.13 + 1.14 + char *data1 = (char*)"data1"; 1.15 + char *data2 = (char*)"data2"; 1.16 + char *data3 = (char*)"data3"; 1.17 + 1.18 + UCX_TEST_BEGIN 1.19 + ucx_avl_put(tree1, 2, (char*)data2); 1.20 + ucx_avl_put(tree1, 1, (char*)data1); 1.21 + ucx_avl_put(tree1, 3, (char*)data3); 1.22 + void *val = ucx_avl_remove(tree1, 3); 1.23 + 1.24 + UCX_TEST_ASSERT(check_tree(tree1->root), "check_tree failed (tree1)"); 1.25 + UCX_TEST_ASSERT(val == data3, "wrong return value (tree1)"); 1.26 + UCX_TEST_ASSERT(ucx_avl_get(tree1, 3) == NULL, "value not removed (tree1)"); 1.27 + 1.28 + for(int i=0;i<20;i++) { 1.29 + if(i==10) { 1.30 + ucx_avl_put(tree2, i, data3); 1.31 + } else if(i==15) { 1.32 + ucx_avl_put(tree2, i, data2); 1.33 + } else { 1.34 + ucx_avl_put(tree2, i, data1); 1.35 + } 1.36 + } 1.37 + 1.38 + UCX_TEST_ASSERT( 1.39 + ucx_avl_remove(tree2, 10) == data3, 1.40 + "wrong return value for key: 10 (tree2)"); 1.41 + UCX_TEST_ASSERT(check_tree(tree2->root), "check_tree failed (tree2)"); 1.42 + 1.43 + UCX_TEST_ASSERT( 1.44 + ucx_avl_remove(tree2, 15) == data2, 1.45 + "wrong return value for key: 15 (tree2)"); 1.46 + UCX_TEST_ASSERT(check_tree(tree2->root), "check_tree failed (tree2)"); 1.47 + 1.48 + for(int i=0;i<20;i++) { 1.49 + ucx_avl_remove(tree2, i); 1.50 + UCX_TEST_ASSERT(check_tree(tree2->root), "check_tree failed (tree2)"); 1.51 + } 1.52 + 1.53 + for(int i=0;i<100000;i++) { 1.54 + ucx_avl_put(tree3, i, data1); 1.55 + } 1.56 + for(int i=100000-1;i>=0;i--) { 1.57 + ucx_avl_remove(tree3, i); 1.58 + } 1.59 + UCX_TEST_ASSERT(tree3->root == NULL, "root not NULL (tree3)"); 1.60 + UCX_TEST_ASSERT(check_tree(tree3->root), "check_tree failed (tree3)"); 1.61 + 1.62 + ucx_avl_put(tree4, 1, data1); 1.63 + ucx_avl_remove(tree4, 1); 1.64 + UCX_TEST_ASSERT(check_tree(tree4->root), "check_tree failed (tree4)"); 1.65 + UCX_TEST_ASSERT(tree4->root == NULL, "root not NULL (tree4)"); 1.66 + UCX_TEST_END 1.67 + 1.68 + ucx_avl_free(tree1); 1.69 + ucx_avl_free(tree2); 1.70 + ucx_avl_free(tree3); 1.71 + ucx_avl_free(tree4); 1.72 +}