]> git.mdlowis.com Git - projs/libcds.git/commitdiff
additional insert tests
authora bellenir <a@bellenir.com>
Wed, 6 Aug 2014 02:25:48 +0000 (02:25 +0000)
committera bellenir <a@bellenir.com>
Wed, 6 Aug 2014 02:25:48 +0000 (02:25 +0000)
tests/test_rb.c

index 2f2fe2c59c83164ba47d0d13d7137f4a035292f8..380ab06b4186d2cd59c072d45b9617a3ab93eaf4 100644 (file)
@@ -121,20 +121,24 @@ TEST_SUITE(RB) {
                rb_tree_t* tree = rb_tree_new();
                rb_node_t* node1 = rb_tree_insert(tree, 42);
                rb_node_t* node2 = rb_tree_insert(tree, 32);
+               CHECK(node1 == tree->root);
+               CHECK(node2 == tree->root->left);
+               CHECK(NULL == tree->root->right);
                CHECK(RED == node2->color);
                //tree->root->right == NULL ; black implicitly
                rb_node_t* node3 = rb_tree_insert(tree, 15);
+               CHECK(NULL != node3);
                CHECK(node2 == tree->root);
                //check node2 fields 
                CHECK(node3 == node2->left);
                CHECK(node1 == node2->right);
-               CHECK(NULL == node2->parent)
+               CHECK(NULL == node2->parent);
                CHECK(BLACK == node2->color);
                CHECK(32 == node2->contents);
                //check node1 fields
                CHECK(NULL == node1->left);
                CHECK(NULL == node1->right);
-               CHECK(node2 == node1->parent)
+               CHECK(node2 == node1->parent);
                CHECK(RED == node1->color);
                CHECK(42 == node1->contents);
                //check node3 fields
@@ -143,7 +147,104 @@ TEST_SUITE(RB) {
                CHECK(node2 == node3->parent);
                CHECK(RED == node3->color);
                CHECK(15 == node3->contents);
+               CHECK(rb_tree_is_valid(tree));
                mem_release(tree);
     }
+    TEST(Verify_rb_insert_parent_uncle_mismatch_outside_right){
+               rb_tree_t* tree = rb_tree_new();
+               rb_node_t* node1 = rb_tree_insert(tree, 42);
+               rb_node_t* node2 = rb_tree_insert(tree, 53);
+               CHECK(node1 == tree->root);
+               CHECK(node2 == tree->root->right);
+               CHECK(NULL == tree->root->left);
+               CHECK(RED == node2->color);
+               rb_node_t* node3 = rb_tree_insert(tree, 99);
+               CHECK(NULL != node3);
+               CHECK(node2 == tree->root);
+               //check node2 fields
+               CHECK(node3 == node2->right);
+               CHECK(node1 == node2->left);
+               CHECK(NULL == node2->parent);
+               CHECK(BLACK == node2->color);
+               CHECK(53 == node2->contents);
+               //check node1 fields
+               CHECK(NULL == node1->left);
+               CHECK(NULL == node1->right);
+               CHECK(node2 == node1->parent);
+               CHECK(RED == node1->color);
+               CHECK(42 == node1->contents);
+               //check node3 fields
+               CHECK(NULL == node3->left);
+               CHECK(NULL == node3->right);
+               CHECK(node2 == node3->parent);
+               CHECK(RED == node3->color);
+               CHECK(99 == node3->contents);
+               CHECK(rb_tree_is_valid(tree));
+               mem_release(tree);
+       }
+       TEST(Verify_rb_insert_parent_uncle_mismatch_inside_left){
+               rb_tree_t* tree = rb_tree_new();
+               rb_node_t* node1 = rb_tree_insert(tree, 42);
+               rb_node_t* node2 = rb_tree_insert(tree, 20);
+               CHECK(node1 == tree->root);
+               CHECK(node2 == tree->root->left);
+               CHECK(NULL == tree->root->right);
+               CHECK(RED == node2->color);
+               rb_node_t* node3 = rb_tree_insert(tree, 33);
+               CHECK(NULL != node3);
+               CHECK(node3 == tree->root);
+               //check node3 fields
+               CHECK(node2 == node3->left);
+               CHECK(node1 == node3->right);
+               CHECK(NULL == node3->parent);
+               CHECK(BLACK == node3->color);
+               CHECK(33 == node3->contents);
+               //check node2 fields
+               CHECK(NULL == node2->left);
+               CHECK(NULL == node2->right);
+               CHECK(node3 == node2->parent);
+               CHECK(RED == node2->color);
+               CHECK(20 == node2->contents);
+               //check node1 fields
+               CHECK(NULL == node1->left);
+               CHECK(NULL == node1->right);
+               CHECK(node3 == node1->parent);
+               CHECK(RED == node1->color);
+               CHECK(42 == node1->contents);
+               CHECK(rb_tree_is_valid(tree));
+               mem_release(tree);
+       }
+       TEST(Verify_rb_insert_parent_uncle_mismatch_inside_right){
+               rb_tree_t* tree = rb_tree_new();
+               rb_node_t* node1 = rb_tree_insert(tree, 42);
+               rb_node_t* node2 = rb_tree_insert(tree, 99);
+               CHECK(node1 == tree->root);
+               CHECK(node2 == tree->root->right);
+               CHECK(NULL == tree->root->left);
+               CHECK(RED == node2->color);
+               rb_node_t* node3 = rb_tree_insert(tree, 88);
+               CHECK(NULL != node3);
+               CHECK(node3 == tree->root);
+               //check node3 fields
+               CHECK(node1 == node3->left);
+               CHECK(node2 == node3->right);
+               CHECK(NULL == node3->parent);
+               CHECK(BLACK == node3->color);
+               CHECK(88 == node3->contents);
+               //check node2 fields
+               CHECK(NULL == node2->left);
+               CHECK(NULL == node2->right);
+               CHECK(node3 == node2->parent);
+               CHECK(RED == node2->color);
+               CHECK(99 == node2->contents);
+               //check node1 fields
+               CHECK(NULL == node1->left);
+               CHECK(NULL == node1->right);
+               CHECK(node3 == node1->parent);
+               CHECK(RED == node1->color);
+               CHECK(42 == node1->contents);
+               CHECK(rb_tree_is_valid(tree));
+               mem_release(tree);
+       }
 }