TestEnv = Env.clone do |env|
env.build_dir('source','build/obj/test_source')
env.build_dir('tests','build/obj/tests/source')
- env['CFLAGS'] += ['-g', '--coverage', '-DLEAK_DETECT_LEVEL=1']
+ env['CFLAGS'] += ['-g', '--coverage', '-DLEAK_DETECT_LEVEL=1', '-DTESTING']
#env['CFLAGS'] += ['-DNDEBUG'] #disables asserts so they won't effect coverage analysis
env["LDFLAGS"] += ['--coverage']
env['CPPPATH'] += Dir['tests/']
if(node->left) mem_release(node->left);
if(node->right) mem_release(node->right);
}
+#ifndef TESTING
+static
+#endif
rbt_node_t* rbt_node_new(void* contents){
rbt_node_t* node = mem_allocate(sizeof(rbt_node_t), &rbt_node_free);
node->left = NULL;
/* ---------------------------------------- */
/* informational / querying functions */
/* ---------------------------------------- */
-
+#ifndef TESTING
+static
+#endif
rbt_color_t rbt_node_color(rbt_node_t* node){
//leaves are NULL and black implicitly
return (node ? node->color : BLACK);
static int rbt_count(rbt_node_t* node){
return (!node ? 0 : (1 + rbt_count(node->left) + rbt_count(node->right)));
}
-int rbt_count_nodes(rbt_t* tree){
+int rbt_size(rbt_t* tree){
return rbt_count(tree->root);
}
rbt_t* rbt_new(comparator_t comparator);
-/**
- * @brief creates a new node for a red-black tree
- *
- * @param contents pointer to the contents of the node
- *
- * @return pointer to newly created node
- */
-rbt_node_t* rbt_node_new(void* contents);
-
-
-/**
- * @brief get the color of a given node
- *
- * @param node the node on which to operate
- *
- * @return RED or BLACK. BLACK if node is NULL (a leaf)
- */
-rbt_color_t rbt_node_color(rbt_node_t* node);
-
-
/**
* @brief find a value in a red-black tree
*
*
* @return the number of nodes present in the tree
*/
-int rbt_count_nodes(rbt_t* tree);
+int rbt_size(rbt_t* tree);
/**
* @brief insert a value into a red-black tree
#include "mem.h"
#include "list.h"
+extern rbt_color_t rbt_node_color(rbt_node_t* node);
+extern rbt_node_t* rbt_node_new(void* contents);
+
static int test_compare(void* a, void* b){
int ia = (int)(mem_unbox(a));
int ib = (int)(mem_unbox(b));
CHECK(NULL == node->right);
CHECK(NULL == node->parent);
CHECK(box42 == node->contents);
- //CHECK(OK == rbt_check_node(node, -1, -1)); //TODO: fix this?
mem_release(node);
}
//-------------------------------------------------------------------------
// Test node count function
//-------------------------------------------------------------------------
- TEST(Verify_count_nodes_works){
+ TEST(Verify_size_works){
int i=0;
rbt_t* tree = rbt_new(NULL);
- CHECK(0 == rbt_count_nodes(tree));
+ CHECK(0 == rbt_size(tree));
for(i = 1; i < 10; i++){
rbt_insert(tree, mem_box(i));
- CHECK(i == rbt_count_nodes(tree));
+ CHECK(i == rbt_size(tree));
}
mem_release(tree);
}
//rbt_t* tree = rbt_new(NULL);
rbt_delete(tree, target);
CHECK(OK == rbt_check_status(tree));
- CHECK(0 == rbt_count_nodes(tree));
+ CHECK(0 == rbt_size(tree));
rbt_insert(tree, box88);
rbt_delete(tree, target);
CHECK(OK == rbt_check_status(tree));
- CHECK(1 == rbt_count_nodes(tree));
+ CHECK(1 == rbt_size(tree));
rbt_insert(tree, box36);
rbt_delete(tree, target);
CHECK(OK == rbt_check_status(tree));
- CHECK(2 == rbt_count_nodes(tree));
+ CHECK(2 == rbt_size(tree));
rbt_insert(tree, box99);
rbt_delete(tree, target);
CHECK(OK == rbt_check_status(tree));
- CHECK(3 == rbt_count_nodes(tree));
+ CHECK(3 == rbt_size(tree));
mem_release(target);
mem_release(tree);
}
mem_retain(foo);
rbt_insert(tree, foo);
listsize++;
- CHECK(listsize == rbt_count_nodes(tree));
+ CHECK(listsize == rbt_size(tree));
}
rbt_status_t status = rbt_check_status(tree);
//printf("status after inserts is %d\n", status);
rbt_delete(tree, foo);
list_delete(vals, idx);
listsize--;
- CHECK(listsize == rbt_count_nodes(tree));
+ CHECK(listsize == rbt_size(tree));
}
status = rbt_check_status(tree);
//printf("status after deletes is %d\n", status);