void Testbst_tree_lookup(CuTest *tc) { test_bst_tree_t *root; test_bst_tree_t *elem; int i; int j; bool ret; void *pret; root = NULL; for (i = 0, j = 30; i < j; i++, j--) { elem = malloc(sizeof(*elem)); elem->key = i; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = j; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); } CuAssertPtrNotNull(tc, root); for (i = 0, j = 30; i < j; i++, j--) { pret = bst_tree_lookup(root, i, btree, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_lookup(root, j, btree, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); } }
void Testbst_tree_prune(CuTest *tc) { test_bst_tree_t *root; test_bst_tree_t *grafted; test_bst_tree_t *elem; int i; int j; bool ret; void *pret; root = NULL; for (i = 0, j = 6; i < j; i++, j--) { elem = malloc(sizeof(*elem)); elem->key = i; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = j; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); } grafted = bst_tree_prune(root, j, btree, BTREE_COMPARE_KEY); CuAssertPtrEquals(tc, NULL, grafted); grafted = bst_tree_prune(root, 5, btree, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, grafted); pret = bst_tree_lookup(grafted, 1, btree, BTREE_COMPARE_KEY); CuAssertPtrEquals(tc, NULL, pret); pret = bst_tree_lookup(grafted, 5, btree, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); ret = bst_tree_graft(root, grafted, btree, BTREE_COMPARE_KEY); CuAssertTrue(tc, ret); for (i = 0, j = 6; i < j; i++, j--) { pret = bst_tree_remove(root, i, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); ret = bst_tree_remove(root, j, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); } CuAssertPtrEquals(tc, NULL, root); }
void Testbst_tree_remove(CuTest *tc) { test_bst_tree_t *root; test_bst_tree_t *elem; void *pret; bool ret; root = NULL; elem = malloc(sizeof(*elem)); elem->key = 4; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 5; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 2; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 3; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 1; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); pret = bst_tree_remove(root, 2, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); CuAssertIntEquals(tc, 4, root->key); CuAssertIntEquals(tc, 5, ((test_bst_tree_t *)root->btree.right)->key); CuAssertIntEquals(tc, 3, ((test_bst_tree_t *)root->btree.left)->key); CuAssertIntEquals(tc, 1, ((test_bst_tree_t *)((test_bst_tree_t *)root->btree.left)->btree.left)->key); }
void Testbst_tree_graft(CuTest *tc) { test_bst_tree_t *root1; test_bst_tree_t *root2; test_bst_tree_t *elem; int i; int j; bool ret; void *pret; root1 = NULL; root2 = NULL; for (i = 0, j = 6; i < j; i++, j--) { elem = malloc(sizeof(*elem)); elem->key = i; ret = bst_tree_insert(root1, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = j; ret = bst_tree_insert(root2, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); } pret = bst_tree_lookup(root1, i + 1, btree, BTREE_COMPARE_KEY); CuAssertPtrEquals(tc, NULL, pret); ret = bst_tree_graft(root1, NULL, btree, BTREE_COMPARE); CuAssertTrue(tc, !ret); ret = bst_tree_graft(root1, root2, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); pret = bst_tree_lookup(root1, j + 1, btree, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); for (i = 0, j = 6; i < j; i++, j--) { pret = bst_tree_remove(root1, i, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_remove(root1, j, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); } }
bst_node *bst_tree_init(int a[],int length){ int i=0; bst_node * root = (bst_node *)malloc(sizeof(bst_node)); root->data = a[0]; root->left = null; root->right = null; for(i = 1;i<length;i++){ bst_node *node = (bst_node *)malloc(sizeof(bst_node)); node->data = a[i]; node->left = null; node->right = null; bst_tree_insert(root,node); } return root ; }
void Testbst_tree_insert(CuTest *tc) { test_bst_tree_t *root; test_bst_tree_t *elem; bool ret; root = NULL; elem = NULL; ret = _bst_tree_insert(NULL, elem, 0, BTREE_COMPARE); CuAssertTrue(tc, !ret); ret = bst_tree_insert(root, NULL, btree, BTREE_COMPARE); // ret = _bst_tree_insert(&(root), // (NULL), // (unsigned int)offsetof(typeof(*(root)), btree), // BTREE_COMPARE); CuAssertTrue(tc, !ret); ret = bst_tree_insert(root, elem, btree, NULL); CuAssertTrue(tc, !ret); elem = malloc(sizeof(*elem)); elem->key = 2; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 1; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 1; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, !ret); elem = malloc(sizeof(*elem)); elem->key = 3; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = root; CuAssertIntEquals(tc, 2, elem->key); CuAssertIntEquals(tc, 1, ((test_bst_tree_t *)elem->btree.left)->key); CuAssertIntEquals(tc, 3, ((test_bst_tree_t *)elem->btree.right)->key); }
void Testbst_tree_walk_postorder(CuTest *tc) { test_bst_tree_t *root; test_bst_tree_t *elem; void *pret; bool ret; root = NULL; elem = malloc(sizeof(*elem)); elem->key = 8; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 6; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 5; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 7; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 10; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 9; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); elem = malloc(sizeof(*elem)); elem->key = 11; ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE); CuAssertTrue(tc, ret); walk_state = true; prev_value = -1; bst_tree_walk_postorder(root, btree, btree_walk_postorder_cb, NULL); CuAssertIntEquals(tc,true, walk_state); pret = bst_tree_remove(root, 8, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_remove(root, 6, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_remove(root, 5, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_remove(root, 7, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_remove(root, 10, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_remove(root, 9, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); pret = bst_tree_remove(root, 11, btree, BTREE_COMPARE, BTREE_COMPARE_KEY); CuAssertPtrNotNull(tc, pret); CuAssertPtrEquals(tc, NULL, root); }