]> git.mdlowis.com Git - archive/atc.git/commitdiff
Added more tests for splay operations
authorMike D. Lowis <mike.lowis@gentex.com>
Mon, 13 Apr 2015 19:57:54 +0000 (15:57 -0400)
committerMike D. Lowis <mike.lowis@gentex.com>
Mon, 13 Apr 2015 19:57:54 +0000 (15:57 -0400)
source/runtime/splaytree.c
tests/test_splaytree.c

index 924f43ead570215930d9c8810e449e009b3f138b..d69b7820810cb0f2929d8bb63d9083063aacec17 100644 (file)
@@ -6,7 +6,10 @@
 #include <stdlib.h>
 #include <string.h>
 
-static node_t* create_node(void* value, node_t* left, node_t* right)
+#ifdef NDEBUG
+static
+#endif
+node_t* create_node(void* value, node_t* left, node_t* right)
 {
     node_t* node = (node_t*)malloc(sizeof(node_t));
     node->value  = value;
index 149500154eae9ea414d3de90db9ef79081f4e106..06cdfd5460620ccabe11aee45f1786268f089189 100644 (file)
@@ -2,6 +2,12 @@
 #include "splaytree.h"
 #include <stdio.h>
 
+extern node_t* create_node(void* value, node_t* left, node_t* right);
+
+static node_t* node(uintptr_t val, node_t* left, node_t* right) {
+    return create_node((void*)val, left, right);
+}
+
 static int cmp_int(uintptr_t key, uintptr_t val) {
     return (key == val) ? 0 : (key < val) ? -1 : 1;
 }
@@ -88,7 +94,7 @@ TEST_SUITE(SplayTree) {
     TEST(Verify_Lookup_will_find_the_item_at_the_root)
     {
         splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
-        splaytree_insert(tree, 42, (void*)42);
+        tree->root = node(42, NULL, NULL);
         CHECK((void*)42 == splaytree_lookup(tree, 42));
         splaytree_destroy(tree);
     }
@@ -103,7 +109,7 @@ TEST_SUITE(SplayTree) {
     TEST(Verify_Lookup_will_return_null_if_value_is_not_present)
     {
         splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
-        splaytree_insert(tree, 42, (void*)42);
+        tree->root = node(42, NULL, NULL);
         CHECK(NULL == splaytree_lookup(tree, 43));
         splaytree_destroy(tree);
     }
@@ -111,8 +117,7 @@ TEST_SUITE(SplayTree) {
     TEST(Verify_Lookup_will_find_the_item_left_of_root_when_less_than)
     {
         splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
-        splaytree_insert(tree, 41, (void*)41);
-        splaytree_insert(tree, 42, (void*)42);
+        tree->root = node(42, node(41, NULL, NULL), NULL);
         CHECK((void*)41 == splaytree_lookup(tree, 41));
         splaytree_destroy(tree);
     }
@@ -120,31 +125,60 @@ TEST_SUITE(SplayTree) {
     TEST(Verify_Lookup_will_find_the_item_right_of_root_when_greater_than)
     {
         splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
-        splaytree_insert(tree, 43, (void*)43);
-        splaytree_insert(tree, 42, (void*)42);
+        tree->root = node(42, NULL, node(43, NULL, NULL));
         CHECK((void*)43 == splaytree_lookup(tree, 43));
         splaytree_destroy(tree);
     }
 
-    TEST(Verify_Lookup_will_find_the_item_right_of_root_when_greater_than)
+    TEST(Verify_Lookup_will_find_the_item_to_the_right_then_left_of_root)
     {
         splaytree_t* tree = splaytree_create((del_fn_t)del_int, (cmp_fn_t)cmp_int);
-        splaytree_insert(tree, 42, (void*)42);
-        splaytree_insert(tree, 43, (void*)43);
-        splaytree_insert(tree, 44, (void*)44);
-        splaytree_insert(tree, 45, (void*)45);
-        puts("----");
+        tree->root = node(42, NULL, node(44, node(43, NULL, NULL), NULL));
         print_tree(tree->root);
-        CHECK((void*)42 == splaytree_lookup(tree, 42));
+        void* value = splaytree_lookup(tree, 43);
+        print_tree(tree->root);
+        CHECK((void*)43 == value);
+        print_tree(tree->root);
+        splaytree_destroy(tree);
+    }
+
+    TEST(Verify_Lookup_will_find_the_item_to_the_left_then_right_of_root)
+    {
+        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);
-        //printf("%p\n", splaytree_lookup(tree, 43));
         CHECK((void*)43 == value);
         print_tree(tree->root);
         splaytree_destroy(tree);
     }
 
+
+    TEST(Verify_Lookup_will_find_the_item_to_the_right_right_left_of_root)
+    {
+        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);
+    }
+
+    TEST(Verify_Lookup_will_find_the_item_to_the_left_left_right_of_root)
+    {
+        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);
+    }
+
     /* Verify: splaytree_delete
      *************************************************************************/
     TEST(Verify_Delete_will_delete_the_item_at_the_root)