int main () { g_type_init(); plan(34); BinaryTree *root = binary_tree_new("data", g_strdup("root")); ok (IS_BINARY_TREE(root), "isa BinaryTree"); ok (!binary_tree_has_left(root), "no left node yet"); ok (!binary_tree_has_right(root), "no right node yet"); ok (!binary_tree_has_parent(root), "no parent for root node"); /* left node */ BinaryTree *left = binary_tree_get_left(root); ok (IS_BINARY_TREE(left), "isa BinaryTree"); ok (binary_tree_get_left(root) == left, "got the same node (and it is %p)", left); ok (binary_tree_has_left(root), "we have a left node now"); ok (binary_tree_has_parent(left), "left has a parent"); ok (binary_tree_get_parent(left) == root, "left's parent is the root"); ok (!binary_tree_has_left(left), "left has no left node yet"); ok (!binary_tree_has_right(left), "left has no right node yet"); ok (!binary_tree_get_data(left), "left has no data"); lives_ok ({binary_tree_set_data(left, g_strdup("left"));}, "assign to left's data");
END_TEST START_TEST(test_binary_tree_insert) { struct bin_tree *bin_tree; int data[4], i; for (i = 0; i < 4; i++) data[i] = i; bin_tree = binary_tree_new(); fail_unless(binary_tree_insert(bin_tree, "foo", &data[1]) == 0, "Couldn't insert foo"); fail_unless(binary_tree_insert(bin_tree, "bar", &data[2]) == 0, "Couldn't insert bar"); fail_unless(binary_tree_insert(bin_tree, "baz", &data[3]) == 0, "Couldn't insert baz"); fail_unless(*((int *)binary_tree_lookup(bin_tree, "foo")) == 1, "Didn't lookup right value"); fail_unless(*((int *)binary_tree_lookup(bin_tree, "bar")) == 2, "Didn't lookup right value"); fail_unless(*((int *)binary_tree_lookup(bin_tree, "baz")) == 3, "Didn't lookup right value"); }
END_TEST START_TEST(test_binary_tree_insert_duplicate) { struct bin_tree *bin_tree; int data = 1; bin_tree = binary_tree_new(); fail_unless(binary_tree_insert(bin_tree, "foo", &data) == 0, "Couldn't insert foo"); fail_unless(binary_tree_insert(bin_tree, "foo", &data) != 0, "Could insert foo, shouldn't be able to"); }
static struct bin_tree * setup_balanced_tree(void) { struct bin_tree *bin_tree; static int data[16]; int i; for (i = 0; i < 16; i++) data[i] = i; bin_tree = binary_tree_new(); fail_unless(binary_tree_insert(bin_tree, "h", &data[8]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "d", &data[4]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "l", &data[12]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "b", &data[2]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "f", &data[6]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "j", &data[10]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "n", &data[14]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "a", &data[1]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "c", &data[3]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "e", &data[5]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "g", &data[7]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "i", &data[9]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "k", &data[11]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "m", &data[13]) == 0, "Couldn't insert"); fail_unless(binary_tree_insert(bin_tree, "o", &data[15]) == 0, "Couldn't insert"); return bin_tree; }
int fasthash_builder_new(FastHashBuilder **out_builder) { FastHashBuilder *fhb; int r; assert(out_builder); fhb = NEW0(FastHashBuilder); if (!fhb) return -ENOMEM; r = binary_tree_new(pointer_compare, &fhb->tree); if (r < 0) { free((void *)fhb); return r; } *out_builder = fhb; return 0; }
BinaryTree create_btree(){ BinaryTree t = binary_tree_new("a"); binary_tree_add_node(&t->root, "b", BINARY_TREE_NODE_SIDE_LEFT); binary_tree_add_node(&t->root, "c", BINARY_TREE_NODE_SIDE_RIGHT); return t; }