Example #1
0
char *test_btree_insert()
{
    // Inserting a value that is smaller than root's value
    struct btree_node *left = Btree_insert(root, &key2, val2);

    test_assert(root->left, "root left node is NULL");
    test_assert(*(int *)root->left->key == key2, "left leaf of root has wrong key");
    test_assert_streq(root->left->val, val2, "left leaf of root has wrong value");

    test_assert(*(int *)left->key == key2, "left node has wrong key");
    test_assert_streq(left->val, val2, "left leaf of root has wrong value");
    test_assert(left->left == NULL, "left node has left set");
    test_assert(left->right == NULL, "left node has right set");

    // Inserting a key that is greater than root's key
    struct btree_node *right = Btree_insert(root, &key3, val3);

    test_assert(root->right, "root left node is NULL");
    test_assert(*(int *)root->right->key == key3, "left leaf of root has wrong key");
    test_assert_streq(root->right->val, val3, "right leaf of root has wrong value");

    test_assert(*(int *)right->key == key3, "right node has wrong key");
    test_assert_streq(right->val, val3, "right leaf of root has wrong value");
    test_assert(right->left == NULL, "right node has left set");
    test_assert(right->right == NULL, "right node has right set");

    // Inserting a key that is smaller than root's left node
    struct btree_node *left2 = Btree_insert(root, &key4, val4);

    test_assert(left->left, "first-level left node's left is NULL");
    test_assert(*(int *)left->left->key == key4, "left leaf of first-level left has wrong key");
    test_assert_streq(left->left->val, val4, "left leaf of first-level left has wrong value");

    test_assert(*(int *)left2->key == key4, "right node has wrong key");
    test_assert_streq(left2->val, val4, "left leaf of first-level left has wrong value");
    test_assert(left2->left == NULL, "right node has left set");
    test_assert(left2->right == NULL, "right node has right set");

    // Inserting a key that is greater than root's right node
    struct btree_node *right2 = Btree_insert(root, &key5, val5);

    test_assert(right->right, "first-level right node's right is NULL");
    test_assert(*(int *)right->right->key == key5, "right leaf of first-level right node has wrong key");
    test_assert_streq(right->right->val, val5, "right leaf of first-level right node has wrong key");

    test_assert(*(int *)right2->key == key5, "right leaf of first-level right node has wrong key");
    test_assert_streq(right2->val, val5, "right leaf of first-level right node has wrong value");
    test_assert(right2->left == NULL, "right node has left set");
    test_assert(right2->right == NULL, "right node has right set");

    return NULL;
}
Example #2
0
void interpret(Bnode *a, int *np)
{
    char command[2];
    char key[2];
    int k;
    void *p;
    while (command[0] != 'q')
    {
        printf("\nInput command ->");
        scanf("%1s", command);
        scanf("%1s", &key);
        k = (int)key[0];
        switch (command[0])
        {
        case 'i' :
        case 'I' :
            if (Btree_insert(k,a,np) == NULL)
                printf("\n   Error : Equal key inputted.");
            else
                printf("\n   Successful insert.");
            break;
        case 'd' :
        case 'D' :
            if (Btree_delete(k,a,np) == NULL)
                printf("\n   Error : Table empty or can't find.");
            else
                printf("\n   Successful delete.");
            break;
        case 's' :
        case 'S' :
            if (Btree_search(k,a,np) == NULL)
                printf("\n   Error : Can'f find that key");
            else
                printf("\n   Ok! find ");
            break;
        case 'l' :
        case 'L' :
            Btree_list(a);
            break;
        case 'o' :
        case 'O' :
            printf("\n");
            Btree_sort(a);
            break;
        }
        printf("  n = %d", *np);
    }
}