void test_avlAdd_twice(void){ Node* x = &node30; int i; i = avlAdd(&x, &node20); i = avlAdd(&x, &node40); UnityAssertEqualNumber((_U_SINT)((30)), (_U_SINT)((x->data)), (((void *)0)), (_U_UINT)59, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((x->balanceFactor)), (((void *)0)), (_U_UINT)60, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((20)), (_U_SINT)((x->left->data)), (((void *)0)), (_U_UINT)61, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((x->left->balanceFactor)), (((void *)0)), (_U_UINT)62, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((40)), (_U_SINT)((x->right->data)), (((void *)0)), (_U_UINT)63, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((x->right->balanceFactor)), (((void *)0)), (_U_UINT)64, UNITY_DISPLAY_STYLE_INT); }
void test_avlRemove_remove_node10_in_tree(void){ Node *root = &node30; int cState = avlAdd(&root,&node10); cState =avlAdd(&root,&node60); TEST_ASSERT_EQUAL_NODE(&node30,&node10,&node60,0); int heightChange; Node *temp = avlRemove(&root,60,&heightChange); TEST_ASSERT_EQUAL_PTR(&node60,temp); TEST_ASSERT_EQUAL_NODE(&node30,&node10,NULL,-1); }
void test_avlAdd_twice(void){ Node* x = &node30; int i; i = avlAdd(&x, &node20); i = avlAdd(&x, &node40); TEST_ASSERT_EQUAL(30,x->data); TEST_ASSERT_EQUAL(0,x->balanceFactor); TEST_ASSERT_EQUAL(20,x->left->data); TEST_ASSERT_EQUAL(0,x->left->balanceFactor); TEST_ASSERT_EQUAL(40,x->right->data); TEST_ASSERT_EQUAL(0,x->right->balanceFactor); }
void test_single_rotation_with_avlAdd(void){ Node* node = malloc(sizeof(Node)); node = (Node*)createNode(2, 30); node->right = (Node*)createNode(1,40); node->right->right = (Node*)createNode(0,50); int i = avlAdd(&node, ((void *)0)); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node->balanceFactor)), (((void *)0)), (_U_UINT)124, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((40)), (_U_SINT)((node->data)), (((void *)0)), (_U_UINT)125, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node->left->balanceFactor)), (((void *)0)), (_U_UINT)126, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((30)), (_U_SINT)((node->left->data)), (((void *)0)), (_U_UINT)127, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node->right->balanceFactor)), (((void *)0)), (_U_UINT)128, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((50)), (_U_SINT)((node->right->data)), (((void *)0)), (_U_UINT)129, UNITY_DISPLAY_STYLE_INT); }
void test_avlAdd_node_to_tree_with_1_branch(void){ Node* node = malloc(sizeof(Node)); node = (Node*)createNode(-1, 30); node->left = (Node*)createNode(0,20); int i; i = avlAdd(&node, &node40); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node->balanceFactor)), (((void *)0)), (_U_UINT)106, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((30)), (_U_SINT)((node->data)), (((void *)0)), (_U_UINT)107, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node->left->balanceFactor)), (((void *)0)), (_U_UINT)108, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((20)), (_U_SINT)((node->left->data)), (((void *)0)), (_U_UINT)109, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node->right->balanceFactor)), (((void *)0)), (_U_UINT)110, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((40)), (_U_SINT)((node->right->data)), (((void *)0)), (_U_UINT)111, UNITY_DISPLAY_STYLE_INT); }
/** 100(-1)60(0) -> 100(-1)60(+1) * 100(-1) -130 100(-2) 60(+1) * / \ ------> / -----> / \ * (0)60 130 (0)60 40 100(-1) * / \ / \ / * 40 80 40 80 80 * **/ void test_avlRemove_remove_node130_and_given_the_bal_factor_of_node60_is_0(void){ Node *root = &node100; int cState = avlAdd(&root,&node60); cState =avlAdd(&root,&node130); cState =avlAdd(&root,&node40); cState =avlAdd(&root,&node80); int heightChange; Node *temp = avlRemove(&root,130,&heightChange); TEST_ASSERT_EQUAL(0,heightChange); TEST_ASSERT_EQUAL_PTR(&node130,temp); TEST_ASSERT_EQUAL_NODE(root,&node40,&node100,1); TEST_ASSERT_EQUAL_NODE(&node100,&node80,NULL,-1); TEST_ASSERT_EQUAL_NODE(&node80,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node40,NULL,NULL,0); }
void test_create_a_large_tree_by_using_avlAdd(void){ Node* tree = &node30; int i = avlAdd(&tree,&node20); i = avlAdd(&tree,&node50); i = avlAdd(&tree,&node10); i = avlAdd(&tree,&node40); i = avlAdd(&tree,&node80); i = avlAdd(&tree,&node60); i = avlAdd(&tree,&node100); TEST_ASSERT_EQUAL(30,tree->data); TEST_ASSERT_EQUAL(0,tree->balanceFactor); TEST_ASSERT_EQUAL(20,tree->left->data); TEST_ASSERT_EQUAL(-1,tree->left->balanceFactor); TEST_ASSERT_EQUAL(10,tree->left->left->data); TEST_ASSERT_EQUAL(0,tree->left->left->balanceFactor); TEST_ASSERT_EQUAL(50,tree->right->data); TEST_ASSERT_EQUAL(1,tree->right->balanceFactor); TEST_ASSERT_EQUAL(80,tree->right->right->data); TEST_ASSERT_EQUAL(0,tree->right->right->balanceFactor); TEST_ASSERT_EQUAL(40,tree->right->left->data); TEST_ASSERT_EQUAL(0,tree->right->left->balanceFactor); TEST_ASSERT_EQUAL(100,tree->right->right->right->data); TEST_ASSERT_EQUAL(0,tree->right->right->right->balanceFactor); TEST_ASSERT_EQUAL(60,tree->right->right->left->data); TEST_ASSERT_EQUAL(0,tree->right->right->left->balanceFactor); }
void test_avlRemove_remove_node80_and_The_BF_of_node60_is_(void){ Node *root = &node100; int cState = avlAdd(&root,&node60); cState =avlAdd(&root,&node130); cState =avlAdd(&root,&node140); cState =avlAdd(&root,&node110); int heightChange; Node *temp = avlRemove(&root,110,&heightChange); TEST_ASSERT_EQUAL(0,heightChange); TEST_ASSERT_EQUAL_PTR(&node110,temp); TEST_ASSERT_EQUAL_NODE(root,&node60,&node130,1); TEST_ASSERT_EQUAL_NODE(&node60,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node130,NULL,&node140,1); }
void test_avlAdd(void){ Node* x = &node10; int i; i = avlAdd(&x, &node20); TEST_ASSERT_EQUAL(10,x->data); TEST_ASSERT_EQUAL(1,x->balanceFactor); TEST_ASSERT_EQUAL(20,x->right->data); TEST_ASSERT_EQUAL(0,x->right->balanceFactor); }
void test_create_a_large_tree_by_using_avlAdd(void){ Node* tree = &node30; int i = avlAdd(&tree,&node20); i = avlAdd(&tree,&node50); i = avlAdd(&tree,&node10); i = avlAdd(&tree,&node40); i = avlAdd(&tree,&node80); i = avlAdd(&tree,&node60); i = avlAdd(&tree,&node100); UnityAssertEqualNumber((_U_SINT)((30)), (_U_SINT)((tree->data)), (((void *)0)), (_U_UINT)77, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((tree->balanceFactor)), (((void *)0)), (_U_UINT)78, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((20)), (_U_SINT)((tree->left->data)), (((void *)0)), (_U_UINT)79, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((-1)), (_U_SINT)((tree->left->balanceFactor)), (((void *)0)), (_U_UINT)80, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((10)), (_U_SINT)((tree->left->left->data)), (((void *)0)), (_U_UINT)81, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((tree->left->left->balanceFactor)), (((void *)0)), (_U_UINT)82, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((50)), (_U_SINT)((tree->right->data)), (((void *)0)), (_U_UINT)83, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((1)), (_U_SINT)((tree->right->balanceFactor)), (((void *)0)), (_U_UINT)84, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((80)), (_U_SINT)((tree->right->right->data)), (((void *)0)), (_U_UINT)85, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((tree->right->right->balanceFactor)), (((void *)0)), (_U_UINT)86, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((40)), (_U_SINT)((tree->right->left->data)), (((void *)0)), (_U_UINT)87, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((tree->right->left->balanceFactor)), (((void *)0)), (_U_UINT)88, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((100)), (_U_SINT)((tree->right->right->right->data)), (((void *)0)), (_U_UINT)89, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((tree->right->right->right->balanceFactor)), (((void *)0)), (_U_UINT)90, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((60)), (_U_SINT)((tree->right->right->left->data)), (((void *)0)), (_U_UINT)91, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((tree->right->right->left->balanceFactor)), (((void *)0)), (_U_UINT)92, UNITY_DISPLAY_STYLE_INT); }
void test_add_a_node_and_double_rotation_the_tree_by_using_avlAdd_function(void){ //declare variable. Node* node1 = malloc(sizeof(Node)); //create a complicated tree. node1 = (Node*)createNode(2, 30); node1->left = (Node*)createNode(-1,20); node1->left->left = (Node*)createNode(0,10); node1->right = (Node*)createNode(-1,80); node1->right->left = (Node*)createNode(1,50); node1->right->right = (Node*)createNode(-1,100); //declare variable to prevent complicated term. Node* nodeBranch1 = node1->right->left; Node* nodeBranch2 = node1->right->right; //continue build the tree. nodeBranch1->left = (Node*)createNode(0,40); nodeBranch1->right = (Node*)createNode(1,60); nodeBranch1->right->right = (Node*)createNode(0,70); nodeBranch2->left = (Node*)createNode(0,90); int i; i = avlAdd(&node1, &node110); nodeBranch1 = node1->right->left; nodeBranch2 = node1->right->right; Node* nodeBranch3 = node1->left->left; //test the tree after rotation. TEST_ASSERT_EQUAL(50,node1->data); TEST_ASSERT_EQUAL(0,node1->balanceFactor); TEST_ASSERT_EQUAL(30,node1->left->data); TEST_ASSERT_EQUAL(-1,node1->left->balanceFactor); TEST_ASSERT_EQUAL(20,node1->left->left->data); TEST_ASSERT_EQUAL(-1,node1->left->left->balanceFactor); TEST_ASSERT_EQUAL(40,node1->left->right->data); TEST_ASSERT_EQUAL(0,node1->left->right->balanceFactor); TEST_ASSERT_EQUAL(80,node1->right->data); TEST_ASSERT_EQUAL(0,node1->right->balanceFactor); TEST_ASSERT_EQUAL(60,nodeBranch1->data); TEST_ASSERT_EQUAL(1,nodeBranch1->balanceFactor); TEST_ASSERT_EQUAL(100,nodeBranch2->data); TEST_ASSERT_EQUAL(0,nodeBranch2->balanceFactor); TEST_ASSERT_EQUAL(70,nodeBranch1->right->data); TEST_ASSERT_EQUAL(0,nodeBranch1->right->balanceFactor); TEST_ASSERT_EQUAL(90,nodeBranch2->left->data); TEST_ASSERT_EQUAL(0,nodeBranch2->left->balanceFactor); TEST_ASSERT_EQUAL(10,nodeBranch3->left->data); TEST_ASSERT_EQUAL(0,nodeBranch3->left->balanceFactor); TEST_ASSERT_EQUAL(110,nodeBranch2->right->data); TEST_ASSERT_EQUAL(0,nodeBranch2->right->balanceFactor); }
void test_avlAdd_node_to_tree_with_1_branch(void){ //declare variable. Node* node = malloc(sizeof(Node)); //create a complicated tree. node = (Node*)createNode(-1, 30); node->left = (Node*)createNode(0,20); //create a tree with 3 nodes. int i; i = avlAdd(&node, &node40); TEST_ASSERT_EQUAL(0,node->balanceFactor); TEST_ASSERT_EQUAL(30,node->data); TEST_ASSERT_EQUAL(0,node->left->balanceFactor); TEST_ASSERT_EQUAL(20,node->left->data); TEST_ASSERT_EQUAL(0,node->right->balanceFactor); TEST_ASSERT_EQUAL(40,node->right->data); }
void test_single_rotation_with_avlAdd(void){ //declare variable. Node* node = malloc(sizeof(Node)); //create a complicated tree. node = (Node*)createNode(2, 30); node->right = (Node*)createNode(1,40); node->right->right = (Node*)createNode(0,50); int i = avlAdd(&node, NULL); TEST_ASSERT_EQUAL(0,node->balanceFactor); TEST_ASSERT_EQUAL(40,node->data); TEST_ASSERT_EQUAL(0,node->left->balanceFactor); TEST_ASSERT_EQUAL(30,node->left->data); TEST_ASSERT_EQUAL(0,node->right->balanceFactor); TEST_ASSERT_EQUAL(50,node->right->data); }
void test_avlAdd(void){ Node* x = &node10; int i; i = avlAdd(&x, &node20); UnityAssertEqualNumber((_U_SINT)((10)), (_U_SINT)((x->data)), (((void *)0)), (_U_UINT)48, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((1)), (_U_SINT)((x->balanceFactor)), (((void *)0)), (_U_UINT)49, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((20)), (_U_SINT)((x->right->data)), (((void *)0)), (_U_UINT)50, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((x->right->balanceFactor)), (((void *)0)), (_U_UINT)51, UNITY_DISPLAY_STYLE_INT); }
/** 30(+1)60(-1)40(0) -> 30(0)60(0)50(0) * 30(+1) 30(+2) 40(0) * / \ ------> / \ -----> / \ * 20 60(-1) 20 60(-1) (0)30 60(0) * / / \ / \ / \ / \ * 10 (0)40 70 (0)40 70 20 35 50 70 * / \ / \ * 35 50 35 50 **/ void test_avlRemove_remove_node10_and_given_the_bal_factor_of_node40_is_0(void){ Node *root = &node30; int cState = avlAdd(&root,&node20); cState =avlAdd(&root,&node60); cState =avlAdd(&root,&node10); cState =avlAdd(&root,&node40); cState =avlAdd(&root,&node70); cState =avlAdd(&root,&node35); cState =avlAdd(&root,&node50); int heightChange; Node *temp = avlRemove(&root,10,&heightChange); TEST_ASSERT_EQUAL(1,heightChange); TEST_ASSERT_EQUAL_PTR(&node10,temp); TEST_ASSERT_EQUAL_NODE(root,&node30,&node60,0); TEST_ASSERT_EQUAL_NODE(root->left,&node20,&node35,0); TEST_ASSERT_EQUAL_NODE(root->right,&node50,&node70,0); TEST_ASSERT_EQUAL_NODE(&node20,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node35,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node50,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node70,NULL,NULL,0); }
void test_avlRemove_remove_node5_and_given_the_bal_factor_of_node60_is_1_and_given_extra_node65_and_node80(void){ Node *root = &node30; int cState = avlAdd(&root,&node10); cState =avlAdd(&root,&node60); cState =avlAdd(&root,&node5); cState =avlAdd(&root,&node50); cState =avlAdd(&root,&node70); cState =avlAdd(&root,&node65); cState =avlAdd(&root,&node80); int heightChange; Node *temp = avlRemove(&root,5,&heightChange); TEST_ASSERT_EQUAL(1,heightChange); TEST_ASSERT_EQUAL_PTR(&node5,temp); TEST_ASSERT_EQUAL_NODE(root,&node30,&node70,0); TEST_ASSERT_EQUAL_NODE(&node30,&node10,&node50,0); TEST_ASSERT_EQUAL_NODE(&node70,&node65,&node80,0); TEST_ASSERT_EQUAL_NODE(&node80,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node65,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node10,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node50,NULL,NULL,0); }
void test_avlGetReplace_expected_BF_of_node60_is_negative_1_and_heightChange_is_0(void){ Node *root = &node30; int cState = avlAdd(&root,&node20); cState =avlAdd(&root,&node60); cState =avlAdd(&root,&node10); cState =avlAdd(&root,&node40); cState =avlAdd(&root,&node70); cState =avlAdd(&root,&node35); cState =avlAdd(&root,&node50); int heightChange; Node *temp = avlGetReplace( &root->right ,&heightChange); printf("heightChange = %d\n", heightChange); TEST_ASSERT_EQUAL(0,heightChange); TEST_ASSERT_EQUAL_PTR(&node35,temp); TEST_ASSERT_EQUAL_NODE(root,&node20,&node60,1); TEST_ASSERT_EQUAL_NODE(&node20,&node10,NULL,-1); TEST_ASSERT_EQUAL_NODE(&node60,&node40,&node70,-1); TEST_ASSERT_EQUAL_NODE(&node10,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node40,NULL,&node50,1); TEST_ASSERT_EQUAL_NODE(&node70,NULL,NULL,0); }
void test_double_rotation_the_tree_by_using_avlAdd_function(void){ Node* node1 = malloc(sizeof(Node)); node1 = (Node*)createNode(2, 30); node1->left = (Node*)createNode(-1,20); node1->left->left = (Node*)createNode(0,10); node1->right = (Node*)createNode(-1,80); node1->right->left = (Node*)createNode(1,50); node1->right->right = (Node*)createNode(-1,100); Node* nodeBranch1 = node1->right->left; Node* nodeBranch2 = node1->right->right; nodeBranch1->left = (Node*)createNode(0,40); nodeBranch1->right = (Node*)createNode(1,60); nodeBranch1->right->right = (Node*)createNode(0,70); nodeBranch2->left = (Node*)createNode(0,90); int i; i = avlAdd(&node1, ((void *)0)); nodeBranch1 = node1->right->left; nodeBranch2 = node1->right->right; Node* nodeBranch3 = node1->left->left; UnityAssertEqualNumber((_U_SINT)((50)), (_U_SINT)((node1->data)), (((void *)0)), (_U_UINT)230, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node1->balanceFactor)), (((void *)0)), (_U_UINT)231, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((30)), (_U_SINT)((node1->left->data)), (((void *)0)), (_U_UINT)232, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((-1)), (_U_SINT)((node1->left->balanceFactor)), (((void *)0)), (_U_UINT)233, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((20)), (_U_SINT)((node1->left->left->data)), (((void *)0)), (_U_UINT)234, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((-1)), (_U_SINT)((node1->left->left->balanceFactor)), (((void *)0)), (_U_UINT)235, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((40)), (_U_SINT)((node1->left->right->data)), (((void *)0)), (_U_UINT)236, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node1->left->right->balanceFactor)), (((void *)0)), (_U_UINT)237, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((80)), (_U_SINT)((node1->right->data)), (((void *)0)), (_U_UINT)238, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node1->right->balanceFactor)), (((void *)0)), (_U_UINT)239, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((60)), (_U_SINT)((nodeBranch1->data)), (((void *)0)), (_U_UINT)240, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((1)), (_U_SINT)((nodeBranch1->balanceFactor)), (((void *)0)), (_U_UINT)241, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((100)), (_U_SINT)((nodeBranch2->data)), (((void *)0)), (_U_UINT)242, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((-1)), (_U_SINT)((nodeBranch2->balanceFactor)), (((void *)0)), (_U_UINT)243, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((70)), (_U_SINT)((nodeBranch1->right->data)), (((void *)0)), (_U_UINT)244, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch1->right->balanceFactor)), (((void *)0)), (_U_UINT)245, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((90)), (_U_SINT)((nodeBranch2->left->data)), (((void *)0)), (_U_UINT)246, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch2->left->balanceFactor)), (((void *)0)), (_U_UINT)247, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((10)), (_U_SINT)((nodeBranch3->left->data)), (((void *)0)), (_U_UINT)248, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch3->left->balanceFactor)), (((void *)0)), (_U_UINT)249, UNITY_DISPLAY_STYLE_INT); }
void test_add_a_node_and_double_rotation_the_tree_by_using_avlAdd_function(void){ Node* node1 = malloc(sizeof(Node)); node1 = (Node*)createNode(2, 30); node1->left = (Node*)createNode(-1,20); node1->left->left = (Node*)createNode(0,10); node1->right = (Node*)createNode(-1,80); node1->right->left = (Node*)createNode(1,50); node1->right->right = (Node*)createNode(-1,100); Node* nodeBranch1 = node1->right->left; Node* nodeBranch2 = node1->right->right; nodeBranch1->left = (Node*)createNode(0,40); nodeBranch1->right = (Node*)createNode(1,60); nodeBranch1->right->right = (Node*)createNode(0,70); nodeBranch2->left = (Node*)createNode(0,90); int i; i = avlAdd(&node1, &node110); nodeBranch1 = node1->right->left; nodeBranch2 = node1->right->right; Node* nodeBranch3 = node1->left->left; UnityAssertEqualNumber((_U_SINT)((50)), (_U_SINT)((node1->data)), (((void *)0)), (_U_UINT)179, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node1->balanceFactor)), (((void *)0)), (_U_UINT)180, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((30)), (_U_SINT)((node1->left->data)), (((void *)0)), (_U_UINT)181, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((-1)), (_U_SINT)((node1->left->balanceFactor)), (((void *)0)), (_U_UINT)182, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((20)), (_U_SINT)((node1->left->left->data)), (((void *)0)), (_U_UINT)183, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((-1)), (_U_SINT)((node1->left->left->balanceFactor)), (((void *)0)), (_U_UINT)184, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((40)), (_U_SINT)((node1->left->right->data)), (((void *)0)), (_U_UINT)185, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node1->left->right->balanceFactor)), (((void *)0)), (_U_UINT)186, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((80)), (_U_SINT)((node1->right->data)), (((void *)0)), (_U_UINT)187, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((node1->right->balanceFactor)), (((void *)0)), (_U_UINT)188, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((60)), (_U_SINT)((nodeBranch1->data)), (((void *)0)), (_U_UINT)189, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((1)), (_U_SINT)((nodeBranch1->balanceFactor)), (((void *)0)), (_U_UINT)190, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((100)), (_U_SINT)((nodeBranch2->data)), (((void *)0)), (_U_UINT)191, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch2->balanceFactor)), (((void *)0)), (_U_UINT)192, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((70)), (_U_SINT)((nodeBranch1->right->data)), (((void *)0)), (_U_UINT)193, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch1->right->balanceFactor)), (((void *)0)), (_U_UINT)194, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((90)), (_U_SINT)((nodeBranch2->left->data)), (((void *)0)), (_U_UINT)195, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch2->left->balanceFactor)), (((void *)0)), (_U_UINT)196, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((10)), (_U_SINT)((nodeBranch3->left->data)), (((void *)0)), (_U_UINT)197, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch3->left->balanceFactor)), (((void *)0)), (_U_UINT)198, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((110)), (_U_SINT)((nodeBranch2->right->data)), (((void *)0)), (_U_UINT)199, UNITY_DISPLAY_STYLE_INT); UnityAssertEqualNumber((_U_SINT)((0)), (_U_SINT)((nodeBranch2->right->balanceFactor)), (((void *)0)), (_U_UINT)200, UNITY_DISPLAY_STYLE_INT); }
/** *Description : To add a node into the AVL tree * *Inputs : *root -> The pointer to root of the current tree * *nodeToAdd -> The node to be added into the tree * *Output : root -> The new root of the tree * */ Node *avlAdd(Node *root, Node *nodeToAdd, int (*compare)(void *, void *)){ int tempBalanceLeft, tempBalanceRight; int compareResult; if(nodeToAdd == NULL) return root; if(root == NULL){ root = nodeToAdd; } else{ compareResult = compare(root, nodeToAdd); if(compareResult == 0) Throw(ERR_ALREADY_IN_TREE); else if(compareResult == 1){ if(root->leftChild != NULL){ tempBalanceLeft = (root->leftChild->balance); avlAdd(root->leftChild, nodeToAdd, compare); if(tempBalanceLeft - (root->leftChild->balance) == 0){} else if((root->leftChild->balance) - 0 != 0) root->balance--; else{} } else{ root->leftChild = nodeToAdd; root->balance--; } } else if(compareResult == -1){ if(root->rightChild != NULL){ tempBalanceRight = (root->rightChild->balance); avlAdd(root->rightChild, nodeToAdd, compare); if(tempBalanceRight - (root->rightChild->balance) == 0){} else if((root->rightChild->balance) - 0 != 0) root->balance++; else{} } else{ root->rightChild = nodeToAdd; root->balance++; } } } if(root->balance == 2 && root->rightChild->balance == 1) root = leftRotate(root); else if(root->balance == 2 && root->rightChild->balance == 0) root = leftRotate(root); else if(root->balance == 2 && root->rightChild->balance == -1) root = doubleLeftRotate(root); else if(root->balance == -2 && root->leftChild->balance == 1) root = doubleRightRotate(root); else if(root->balance == -2 && root->leftChild->balance == -1) root = rightRotate(root); else if(root->balance == -2 && root->leftChild->balance == 0) root = rightRotate(root); else{} return root; }
/** * 80(+1) 80(+1) 80(0) HC = 1; * / \ ------> / \ -----> / \ * 50 140(-1) 50 140(-1) 50 140(-1) * / \ / \ / \ / \ / \ / \ * 40 70 (+1)100 150 40 70 (+2)100 150 40 70 (0)110 150 * / / \ \ / \ \ / / \ \ * 30 90 110 160 30 110 160 30 100 120 160 * / \ / \ \ * 105 120 105 120 105 **/ void test_avlGetReplace_expected_get_node90_BF_of_node_is_0(void){ Node *root = &node80; int cState = avlAdd(&root,&node50); cState =avlAdd(&root,&node140); cState =avlAdd(&root,&node40); cState =avlAdd(&root,&node70); cState =avlAdd(&root,&node100); cState =avlAdd(&root,&node150); cState =avlAdd(&root,&node30); cState =avlAdd(&root,&node90); cState =avlAdd(&root,&node110); cState =avlAdd(&root,&node160); cState =avlAdd(&root,&node105); cState =avlAdd(&root,&node120); TEST_ASSERT_EQUAL_NODE(root,&node50,&node140,1); TEST_ASSERT_EQUAL_NODE(&node50,&node40,&node70,-1); TEST_ASSERT_EQUAL_NODE(&node40,&node30,NULL,-1); TEST_ASSERT_EQUAL_NODE(&node140,&node100,&node150,-1); TEST_ASSERT_EQUAL_NODE(&node90,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node110,&node105,&node120,0); TEST_ASSERT_EQUAL_NODE(&node100,&node90,&node110,1); TEST_ASSERT_EQUAL_NODE(&node150,NULL,&node160,1); int heightChange; Node *temp = avlGetReplace( &root->right ,&heightChange); printf(" heightChange = %d\n", heightChange); TEST_ASSERT_EQUAL(0,heightChange); TEST_ASSERT_EQUAL_PTR(&node90,temp); TEST_ASSERT_EQUAL_NODE(&node110,&node100,&node120,-1); TEST_ASSERT_EQUAL_NODE(&node80,&node50,&node140,1); TEST_ASSERT_EQUAL_NODE(&node50,&node40,&node70,-1); TEST_ASSERT_EQUAL_NODE(&node40,&node30,NULL,-1); TEST_ASSERT_EQUAL_NODE(&node70,NULL,NULL,0); TEST_ASSERT_EQUAL_NODE(&node140,&node110,&node150,-1); TEST_ASSERT_EQUAL_NODE(&node150,NULL,&node160,1); }