test/avl_tests.c

changeset 200
e3aad99d2d80
parent 198
b0f4fb043b47
child 201
45810f5b7b84
     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 +}

mercurial