Beispiel #1
0
struct t_node *node_search(struct t_node *root, void *key, comp eq) {
    if(!root || root->data == key) {
        return root;
    }
    else if(eq(root->data, key) < 0) {
        return node_search(root->right, key, eq);
    }
    else {
        return node_search(root->left, key, eq);
    }
}
END_TEST

START_TEST(test_node_delete)
{
    node *root = node_new("d", "definition");
    node *l = node_new("b", "b");
    node *ll = node_new("a", "a");
    node *lr = node_new("c", "c");

    node_insert(root, l);
    node_insert(root, ll);
    node_insert(root, lr);

    // ensure correct insertions
    ck_assert_ptr_eq(l, root->left);
    ck_assert_ptr_eq(ll, root->left->left);
    ck_assert_ptr_eq(lr, root->left->right);

    ck_assert_int_eq(4, node_size(root));

    ck_assert_ptr_eq(l, node_delete(root, "b"));

    // ensure correct reinsertion
    ck_assert_ptr_eq(ll, root->left);
    ck_assert_ptr_eq(NULL, root->right);
    ck_assert_ptr_eq(NULL, root->left->left);
    ck_assert_ptr_eq(lr, root->left->right);

    // node is not found in the tree anymore
    ck_assert_ptr_eq(NULL, node_search(root, "b"));

    ck_assert_int_eq(3, node_size(root));

    node_free(root);
}
END_TEST

START_TEST(test_node_search)
{
    node *root = node_new("term", "definition");
    node *l = node_new("a", "");
    node *r = node_new("c", "");

    node_insert(root, l);
    node_insert(root, r);

    node *s = node_search(root, "a");

    ck_assert_ptr_eq(l, s);

    node_free(root);
}
Beispiel #4
0
struct t_node *tree_search(struct bs_tree *tree, void *key, comp eq) {
    return node_search(tree->root, key, eq);
}