From: Michael D. Lowis Date: Tue, 14 Apr 2015 03:03:49 +0000 (-0400) Subject: Fixed busted tests X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=9f7342f51d1c7dcf6ff32ee42445be528db8abd4;p=archive%2Fatc.git Fixed busted tests --- diff --git a/source/runtime/splaytree.c b/source/runtime/splaytree.c index d69b782..1770cb9 100644 --- a/source/runtime/splaytree.c +++ b/source/runtime/splaytree.c @@ -5,6 +5,9 @@ #include "splaytree.h" #include #include +#include + +extern void print_tree(node_t* tree); #ifdef NDEBUG static @@ -49,38 +52,37 @@ static void splay(splaytree_t* tree, uintptr_t key) { node_t* subleft = &subroots; node_t* subright = &subroots; node_t* root = tree->root; - if (NULL != root) { - while (1) { - int cmp = tree->compare(key, root->value); - if (cmp < 0) { + + while (1) { + int cmp = tree->compare(key, root->value); + if (cmp < 0) { + if (NULL == root->left) break; + if (tree->compare(key, root->left->value) < 0) { + root = rotate(root, RIGHT); if (NULL == root->left) break; - if (tree->compare(key, root->left->value) < 0) { - root = rotate(root, RIGHT); - if (NULL == root->left) break; - } - subright->left = root; - subright = root; - root = root->left; - } else if (cmp > 0) { + } + subright->left = root; + subright = root; + root = root->left; + } else if (cmp > 0) { + if (NULL == root->right) break; + if (tree->compare(key, root->right->value) > 0) { + root = rotate(root, LEFT); if (NULL == root->right) break; - if (tree->compare(key, root->right->value) < 0) { - root = rotate(root, LEFT); - if (NULL == root->right) break; - } - subleft->right = root; - subleft = root; - root = root->right; - } else { - break; } + subleft->right = root; + subleft = root; + root = root->right; + } else { + break; } } /* assemble */ subleft->right = root->left; subright->left = root->right; - root->left = subroots.right; - root->right = subroots.left; + root->left = subroots.right; + root->right = subroots.left; /* Set the root */ tree->root = root; diff --git a/tests/test_splaytree.c b/tests/test_splaytree.c index 06cdfd5..ad0bd1b 100644 --- a/tests/test_splaytree.c +++ b/tests/test_splaytree.c @@ -134,11 +134,8 @@ TEST_SUITE(SplayTree) { { splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int); tree->root = node(42, NULL, node(44, node(43, NULL, NULL), NULL)); - print_tree(tree->root); void* value = splaytree_lookup(tree, 43); - print_tree(tree->root); CHECK((void*)43 == value); - print_tree(tree->root); splaytree_destroy(tree); } @@ -146,11 +143,8 @@ TEST_SUITE(SplayTree) { { splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int); tree->root = node(44, node(42, NULL, node(43, NULL, NULL)), NULL); - print_tree(tree->root); void* value = splaytree_lookup(tree, 43); - print_tree(tree->root); CHECK((void*)43 == value); - print_tree(tree->root); splaytree_destroy(tree); } @@ -159,11 +153,8 @@ TEST_SUITE(SplayTree) { { splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int); tree->root = node(42, NULL, node(43, NULL, node(45, node(44, NULL, NULL), NULL))); - print_tree(tree->root); void* value = splaytree_lookup(tree, 44); - print_tree(tree->root); CHECK((void*)44 == value); - print_tree(tree->root); splaytree_destroy(tree); } @@ -171,11 +162,8 @@ TEST_SUITE(SplayTree) { { splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int); tree->root = node(42, node(41, node(39, NULL, node(40, NULL, NULL)), NULL), NULL); - print_tree(tree->root); void* value = splaytree_lookup(tree, 40); - print_tree(tree->root); CHECK((void*)40 == value); - print_tree(tree->root); splaytree_destroy(tree); }