diff options
| -rw-r--r-- | src/03/rb_tree.c | 11 | ||||
| -rw-r--r-- | src/03/rb_tree.h | 13 | ||||
| -rw-r--r-- | src/03/rb_tree_test.c | 15 |
3 files changed, 39 insertions, 0 deletions
diff --git a/src/03/rb_tree.c b/src/03/rb_tree.c index e69de29..811192d 100644 --- a/src/03/rb_tree.c +++ b/src/03/rb_tree.c @@ -0,0 +1,11 @@ +#include "rb_tree.h" +#include <stdlib.h> + +RBTree *rb_tree_initialize(int value) { + RBTree *tree = malloc(sizeof(RBTree)); + tree->colour = black; + tree->left = NULL; + tree->right = NULL; + tree->value = value; + return tree; +} diff --git a/src/03/rb_tree.h b/src/03/rb_tree.h index e69de29..0945c36 100644 --- a/src/03/rb_tree.h +++ b/src/03/rb_tree.h @@ -0,0 +1,13 @@ +enum colour { + black = 0x01, + red = 0x00, +}; + +typedef struct rb_node { + struct rb_node *left; + struct rb_node *right; + enum colour colour; + int value; +} RBTree; + +RBTree *rb_tree_initialize(int value); diff --git a/src/03/rb_tree_test.c b/src/03/rb_tree_test.c index 6ce05f4..4d5d989 100644 --- a/src/03/rb_tree_test.c +++ b/src/03/rb_tree_test.c @@ -1,13 +1,28 @@ #include "rb_tree.h" #include <cgreen/cgreen.h> #include <string.h> +/* + * Every node has a colour. red or black + * Root of the tree is always black. + * There are no two adjacent red nodes. (red node cannot have red parent or child) + * Every path from root to child NULL node has same # of black nodes. + */ Ensure(one_equals_one) { assert_that(1, is_equal_to(1)); } +Ensure(initialize_returns_a_new_tree) { + RBTree *tree = rb_tree_initialize(10); + + assert_that(tree, is_not_equal_to(NULL)); + assert_that(tree->value, is_equal_to(10)); + assert_that(tree->colour, is_equal_to(black)); +} + TestSuite *rb_tree_tests() { TestSuite *x = create_test_suite(); add_test(x, one_equals_one); + add_test(x, initialize_returns_a_new_tree); return x; } |
