Commit 2c5a1f4
Changed files (3)
src
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;
+}
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);
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;
}