rb_node_t* node = mem_allocate(sizeof(rb_node_t), &rb_node_free);
node->left = NULL;
node->right = NULL;
+ node->parent = NULL;
node->contents = contents;
node->color = RED;
return node;
if(parent->left){
rb_tree_insert_node(tree, node, parent->left, parent, parent->right);
}else{
+ node->parent = parent;
parent->left = node;
rb_tree_recolor(node, parent, grandparent, uncle);
}
if(parent->right){
rb_tree_insert_node(tree, node, parent->right, parent, parent->left);
}else{
+ node->parent = parent;
parent->right = node;
rb_tree_recolor(node, parent, grandparent, uncle);
}
CHECK(NULL != node);
CHECK(NULL == node->left);
CHECK(NULL == node->right);
+ CHECK(NULL == node->parent);
CHECK(42 == node->contents);
CHECK(rb_node_is_valid(node, -1, -1));
mem_release(node);
CHECK(NULL != node);
CHECK(tree->root == node);
CHECK(42 == node->contents);
+ CHECK(NULL == node->left);
+ CHECK(NULL == node->right);
+ CHECK(NULL == node->parent);
CHECK(rb_tree_is_valid(tree));
mem_release(tree);
}
CHECK(NULL != root);
CHECK(NULL != node1);
CHECK(tree->root == root);
+ CHECK(root == node1->parent);
CHECK(31 == node1->contents);
CHECK(node1 == root->left);
CHECK(NULL == root->right);
CHECK(NULL != root);
CHECK(NULL != node2);
CHECK(tree->root == root);
+ CHECK(root == node2->parent);
CHECK(64 == node2->contents);
CHECK(node2 == root->right);
CHECK(NULL == root->left);
CHECK(NULL != node1);
CHECK(NULL != node2);
CHECK(tree->root == root);
+ CHECK(root == node1->parent);
+ CHECK(root == node2->parent);
CHECK(31 == node1->contents);
CHECK(64 == node2->contents);
CHECK(node1 == root->left);
CHECK(rb_tree_is_valid(tree));
mem_release(tree);
}
+ /*
+ TEST(Verify_rb_insert_below_full_first_level_works){
+ rb_tree_t* tree = rb_tree_new();
+ rb_node_t* root = rb_tree_insert(tree, 42);
+ rb_node_t* node1 = rb_tree_insert(tree, 31);
+ rb_node_t* node2 = rb_tree_insert(tree, 64);
+ rb_node_t* node3 = rb_tree_insert(tree, 15);
+ CHECK(NULL != node3);
+ CHECK(15 == node3->contents);
+ CHECK(node1->left == node3);
+ CHECK(NULL == node3->left);
+ CHECK(NULL == node3->right);
+ CHECK(BLACK == root->color);
+ CHECK(
+ CHECK(rb_tree_is_valid(tree));
+ mem_release(tree);
+ }
+ */
}