#include "btree.h" #include #include Describe(BinaryTree); BeforeEach(BinaryTree) {} AfterEach(BinaryTree) {} Ensure(BinaryTree, when_the_tree_is_NULL) { BTree *tree = btree_insert(NULL, 10); assert_that(tree, is_not_equal_to(NULL)); assert_that(tree->data, is_equal_to(10)); } Ensure(BinaryTree, when_the_tree_has_a_single_node_it_returns_the_items_in_order) { BTree *tree = btree_insert(NULL, 10); btree_in_order_number(tree); assert_that(tree->in_order[0], is_equal_to(10)); } Ensure(BinaryTree, when_the_tree_has_multiple_levels_it_returns_the_items_in_order) { BTree *tree = btree_insert(NULL, 10); btree_insert(tree, 5); btree_insert(tree, 15); btree_insert(tree, 7); btree_insert(tree, 12); btree_insert(tree, 18); btree_insert(tree, 3); btree_in_order_number(tree); assert_that(tree->in_order[0], is_equal_to(3)); assert_that(tree->in_order[1], is_equal_to(5)); assert_that(tree->in_order[2], is_equal_to(7)); assert_that(tree->in_order[3], is_equal_to(10)); assert_that(tree->in_order[4], is_equal_to(12)); assert_that(tree->in_order[5], is_equal_to(15)); assert_that(tree->in_order[6], is_equal_to(18)); } Ensure(BinaryTree, when_the_tree_has_multiple_levels_it_returns_the_items_in_pre_order) { BTree *tree = btree_insert(NULL, 10); btree_insert(tree, 5); btree_insert(tree, 15); btree_insert(tree, 7); btree_insert(tree, 12); btree_insert(tree, 18); btree_insert(tree, 3); /* 10 / \ 5 15 / \ / \ 3 7 12 18 */ btree_pre_order_number(tree); assert_that(tree->pre_order[0], is_equal_to(10)); assert_that(tree->pre_order[1], is_equal_to(5)); assert_that(tree->pre_order[2], is_equal_to(3)); assert_that(tree->pre_order[3], is_equal_to(7)); assert_that(tree->pre_order[4], is_equal_to(15)); assert_that(tree->pre_order[5], is_equal_to(12)); assert_that(tree->pre_order[6], is_equal_to(18)); } Ensure(BinaryTree, when_the_tree_has_multiple_levels_it_returns_the_items_in_post_order) { BTree *tree = btree_insert(NULL, 10); btree_insert(tree, 5); btree_insert(tree, 15); btree_insert(tree, 7); btree_insert(tree, 12); btree_insert(tree, 18); btree_insert(tree, 3); /* 10 / \ 5 15 / \ / \ 3 7 12 18 */ btree_post_order_number(tree); assert_that(tree->post_order[0], is_equal_to(3)); assert_that(tree->post_order[1], is_equal_to(7)); assert_that(tree->post_order[2], is_equal_to(5)); assert_that(tree->post_order[3], is_equal_to(12)); assert_that(tree->post_order[4], is_equal_to(18)); assert_that(tree->post_order[5], is_equal_to(15)); assert_that(tree->post_order[6], is_equal_to(10)); } Ensure( BinaryTree, when_inserting_an_item_less_than_the_root_in_a_tree_it_creates_a_node_on_the_left_side) { BTree *tree = btree_init(10); btree_insert(tree, -5); assert_that(tree->left, is_not_equal_to(NULL)); assert_that(tree->left->data, is_equal_to(-5)); } Ensure( BinaryTree, when_inserting_an_item_greater_than_the_root_in_a_tree_it_creates_a_node_on_the_right_side) { BTree *tree = btree_init(10); btree_insert(tree, 16); assert_that(tree->right, is_not_equal_to(NULL)); assert_that(tree->right->data, is_equal_to(16)); } Ensure( BinaryTree, when_inserting_an_item_equal_to_the_root_in_a_tree_it_creates_a_node_on_the_left_side) { BTree *tree = btree_init(10); btree_insert(tree, 10); assert_that(tree->left, is_not_equal_to(NULL)); assert_that(tree->left->data, is_equal_to(10)); } Ensure( BinaryTree, when_inserting_multiple_items_into_a_tree_it_inserts_in_the_correct_position) { BTree *tree = btree_insert(NULL, 10); btree_insert(tree, -5); btree_insert(tree, 16); assert_that(tree->data, is_equal_to(10)); assert_that(tree->left->data, is_equal_to(-5)); assert_that(tree->right->data, is_equal_to(16)); btree_insert(tree, -8); assert_that(tree->left->left, is_not_equal_to(NULL)); assert_that(tree->left->left->data, is_equal_to(-8)); btree_insert(tree, 7); assert_that(tree->left->right, is_not_equal_to(NULL)); assert_that(tree->left->right->data, is_equal_to(7)); btree_insert(tree, 18); assert_that(tree->right->right, is_not_equal_to(NULL)); assert_that(tree->right->right->data, is_equal_to(18)); btree_insert(tree, 6); assert_that(tree->left->right->left, is_not_equal_to(NULL)); assert_that(tree->left->right->left->data, is_equal_to(6)); } Ensure( BinaryTree, when_inserting_items_described_in_the_assignment_it_inserts_in_the_expected_position_in_the_tree) { BTree *tree = btree_insert(NULL, 1); tree = btree_insert(tree, 5); tree = btree_insert(tree, 2); tree = btree_insert(tree, 4); tree = btree_insert(tree, 3); assert_that(tree, is_not_equal_to(NULL)); } TestSuite *btree_tests() { TestSuite *suite = create_test_suite(); add_test_with_context(suite, BinaryTree, when_the_tree_is_NULL); add_test_with_context( suite, BinaryTree, when_the_tree_has_a_single_node_it_returns_the_items_in_order); add_test_with_context( suite, BinaryTree, when_the_tree_has_multiple_levels_it_returns_the_items_in_order); add_test_with_context( suite, BinaryTree, when_the_tree_has_multiple_levels_it_returns_the_items_in_pre_order); add_test_with_context( suite, BinaryTree, when_the_tree_has_multiple_levels_it_returns_the_items_in_post_order); add_test_with_context( suite, BinaryTree, when_inserting_an_item_less_than_the_root_in_a_tree_it_creates_a_node_on_the_left_side); add_test_with_context( suite, BinaryTree, when_inserting_an_item_greater_than_the_root_in_a_tree_it_creates_a_node_on_the_right_side); add_test_with_context( suite, BinaryTree, when_inserting_an_item_equal_to_the_root_in_a_tree_it_creates_a_node_on_the_left_side); add_test_with_context( suite, BinaryTree, when_inserting_multiple_items_into_a_tree_it_inserts_in_the_correct_position); add_test_with_context( suite, BinaryTree, when_inserting_items_described_in_the_assignment_it_inserts_in_the_expected_position_in_the_tree); return suite; } extern TestSuite *stack_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, btree_tests()); add_suite(suite, stack_tests()); return run_test_suite(suite, create_text_reporter()); }