--- /dev/null
+#include <stdlib.h>
+
+#include "mem.h"
+#include "rb.h"
+
+static void rb_tree_free(void* v_tree){
+ rb_tree_t* tree = (rb_tree_t*) v_tree;
+ if(tree && tree->root) mem_release(tree->root);
+}
+
+static void rb_node_free(void* v_node){
+ rb_node_t* node = (rb_node_t*) v_node;
+ if(node){
+ if(node->left) mem_release(node->left);
+ if(node->right) mem_release(node->right);
+ }
+}
+
+
+rb_node_t* rb_node_new(int contents){
+ rb_node_t* node = mem_allocate(sizeof(rb_node_t), &rb_node_free);
+ node->left = NULL;
+ node->right = NULL;
+ node->contents = contents;
+ node->color = RED;
+ return node;
+}
+
+rb_tree_t* rb_tree_new(){
+ rb_tree_t* tree = mem_allocate(sizeof(rb_tree_t), &rb_tree_free);
+ tree->root = NULL;
+ return tree;
+}
+
--- /dev/null
+#ifndef RB_H
+#define RB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ RED = 0,
+ BLACK
+} rb_color_t;
+
+typedef struct rb_node_t {
+ struct rb_node_t* left;
+ struct rb_node_t* right;
+ rb_color_t color;
+ int contents; /* int for development; TODO: make this a void* */
+} rb_node_t;
+
+typedef struct {
+ rb_node_t* root;
+} rb_tree_t;
+
+
+rb_node_t* rb_node_new(int contents);
+rb_tree_t* rb_tree_new();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RB_H */
+
RUN_TEST_SUITE(Vector);
RUN_TEST_SUITE(List);
RUN_TEST_SUITE(Buffer);
+ RUN_TEST_SUITE(RB);
return PRINT_TEST_RESULTS();
}
--- /dev/null
+// Unit Test Framework Includes
+#include "test.h"
+
+#include "rb.h"
+#include "mem.h"
+
+static void test_setup(void) { }
+//-----------------------------------------------------------------------------
+// Begin Unit Tests
+//-----------------------------------------------------------------------------
+TEST_SUITE(RB) {
+ //-------------------------------------------------------------------------
+ // Test the rb_new functions
+ //-------------------------------------------------------------------------
+ TEST(Verify_rb_node_new_returns_a_new_node){
+ rb_node_t* node = rb_node_new(42);
+ CHECK(NULL != node);
+ CHECK(NULL == node->left);
+ CHECK(NULL == node->right);
+ CHECK(42 == node->contents);
+ mem_release(node);
+ }
+
+ TEST(Verify_rb_tree_new_returns_an_empty_red_black_tree){
+ rb_tree_t* rb = rb_tree_new();
+ CHECK(rb != NULL);
+ CHECK(rb->root == NULL);
+ mem_release(rb);
+ }
+
+}
+