summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/03/rb_tree.c11
-rw-r--r--src/03/rb_tree.h13
-rw-r--r--src/03/rb_tree_test.c15
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;
}