diff options
| author | mo khan <mo.khan@gmail.com> | 2020-07-11 16:43:04 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-07-11 16:43:04 -0600 |
| commit | 705dc38744938c0e5eff0d6b9276c67da3a3b966 (patch) | |
| tree | 4b4bde18adde1cc011b62c7fed9bfdf426afefba /src/02/01/binary_tree_test.c | |
| parent | 1efedbdd9f040810ebe7ff63f736e863c36ac82a (diff) | |
Complete preorder traversal of a binary tree
Diffstat (limited to 'src/02/01/binary_tree_test.c')
| -rw-r--r-- | src/02/01/binary_tree_test.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/02/01/binary_tree_test.c b/src/02/01/binary_tree_test.c new file mode 100644 index 0000000..bbd7166 --- /dev/null +++ b/src/02/01/binary_tree_test.c @@ -0,0 +1,103 @@ +#include "binary_tree.h" +#include <cgreen/cgreen.h> +#include <string.h> + +int visited[256]; +int visited_count; + +Describe(BinaryTree); +BeforeEach(BinaryTree) { + memset(visited, 0, sizeof(visited)); + visited_count = 0; +} +AfterEach(BinaryTree) {} + +void visitor(Node *node) { + visited[visited_count] = node->data; + visited_count++; +} + +Ensure(BinaryTree, when_traversing_in_preorder_when_the_tree_is_empty) { + preorder_next(NULL, visitor); + + assert_that(visited_count, is_equal_to(0)); +} + +Ensure(BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_single_node) { + Node *node = initialize(100); + + preorder_next(node, visitor); + + assert_that(visited_count, is_equal_to(1)); + assert_that(visited[0], is_equal_to(100)); +} + +Ensure(BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_left_node) { + Node *node = initialize(100); + node->left = initialize(200); + + preorder_next(node, visitor); + + assert_that(visited_count, is_equal_to(2)); + assert_that(visited[0], is_equal_to(100)); + assert_that(visited[1], is_equal_to(200)); +} + +Ensure(BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_right_node) { + Node *node = initialize(100); + node->right = initialize(300); + + preorder_next(node, visitor); + + assert_that(visited_count, is_equal_to(2)); + assert_that(visited[0], is_equal_to(100)); + assert_that(visited[1], is_equal_to(300)); +} + +Ensure(BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_left_and_right_node) { + Node *node = initialize(100); + node->left = initialize(200); + node->right = initialize(300); + + preorder_next(node, visitor); + + assert_that(visited_count, is_equal_to(3)); + assert_that(visited[0], is_equal_to(100)); + assert_that(visited[1], is_equal_to(200)); + assert_that(visited[2], is_equal_to(300)); +} + +Ensure(BinaryTree, when_traversing_in_preorder_when_the_tree_has_multiple_levels) { + Node *node = initialize(100); + node->left = initialize(200); + node->right = initialize(300); + + node->left->left = initialize(400); + node->left->right = initialize(500); + + preorder_next(node, visitor); + + assert_that(visited_count, is_equal_to(5)); + assert_that(visited[0], is_equal_to(100)); + assert_that(visited[1], is_equal_to(200)); + assert_that(visited[2], is_equal_to(400)); + assert_that(visited[3], is_equal_to(500)); + assert_that(visited[4], is_equal_to(300)); +} + +TestSuite *binary_tree_tests() { + TestSuite *suite = create_test_suite(); + + add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_is_empty); + add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_single_node); + add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_left_node); + add_test_with_context(suite, BinaryTree, when_traversing_in_preorder_when_the_tree_has_a_right_node); + + return suite; +} + +int main(int argc, char **argv) { + TestSuite *suite = create_test_suite(); + add_suite(suite, binary_tree_tests()); + return run_test_suite(suite, create_text_reporter()); +} |
