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; }
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); } }