forked from vieter-v/libvieter
fix(tree): fix wrong rotation function
This commit is contained in:
parent
17c2e15385
commit
70217bee21
4 changed files with 71 additions and 2 deletions
56
test/tree/test_balancing.c
Normal file
56
test/tree/test_balancing.c
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#include "acutest.h"
|
||||
#include "vieter_tree_internal.h"
|
||||
#include "vieter_tree_node.h"
|
||||
#include "vieter_tree_balancing.h"
|
||||
|
||||
void test_rotate_right() {
|
||||
vieter_tree_node *a = vieter_tree_node_init();
|
||||
vieter_tree_node *b = vieter_tree_node_init();
|
||||
vieter_tree_node *p = vieter_tree_node_init();
|
||||
|
||||
vieter_tree_node_set_child(p, a, false);
|
||||
vieter_tree_node_set_child(p, b, true);
|
||||
|
||||
vieter_tree_node *c = vieter_tree_node_init();
|
||||
vieter_tree_node *q = vieter_tree_node_init();
|
||||
|
||||
vieter_tree_node_set_child(q, p, false);
|
||||
vieter_tree_node_set_child(q, c, true);
|
||||
|
||||
vieter_tree_node *new_root = vieter_tree_node_rotate(q, true);
|
||||
|
||||
TEST_CHECK(new_root == p);
|
||||
TEST_CHECK(new_root->children[0] == a);
|
||||
TEST_CHECK(new_root->children[1] == q);
|
||||
TEST_CHECK(new_root->children[1]->children[0] == b);
|
||||
TEST_CHECK(new_root->children[1]->children[1] == c);
|
||||
}
|
||||
|
||||
void test_rotate_left() {
|
||||
vieter_tree_node *b = vieter_tree_node_init();
|
||||
vieter_tree_node *c = vieter_tree_node_init();
|
||||
vieter_tree_node *q = vieter_tree_node_init();
|
||||
|
||||
vieter_tree_node_set_child(q, b, false);
|
||||
vieter_tree_node_set_child(q, c, true);
|
||||
|
||||
vieter_tree_node *a = vieter_tree_node_init();
|
||||
vieter_tree_node *p = vieter_tree_node_init();
|
||||
|
||||
vieter_tree_node_set_child(p, a, false);
|
||||
vieter_tree_node_set_child(p, q, true);
|
||||
|
||||
vieter_tree_node *new_root = vieter_tree_node_rotate(p, false);
|
||||
|
||||
TEST_CHECK(new_root == q);
|
||||
TEST_CHECK(new_root->children[0] == p);
|
||||
TEST_CHECK(new_root->children[1] == c);
|
||||
TEST_CHECK(new_root->children[0]->children[0] == a);
|
||||
TEST_CHECK(new_root->children[0]->children[1] == b);
|
||||
}
|
||||
|
||||
TEST_LIST = {
|
||||
{"tree tree rotate right", test_rotate_right},
|
||||
{"tree tree rotate left", test_rotate_left},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
|
@ -42,7 +42,7 @@ void test_remove() {
|
|||
|
||||
void *out;
|
||||
|
||||
for (uint64_t i = 0; i < 25; i++) {
|
||||
for (uint64_t i = 0; i < 100; i++) {
|
||||
TEST_CHECK(vieter_tree_search(&out, tree, i) == vieter_tree_ok);
|
||||
TEST_CHECK(vieter_tree_remove(&out, tree, i) == vieter_tree_ok);
|
||||
TEST_CHECK(vieter_tree_validate(tree));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue