Explorar o código

examples: bavl_test, savl_test: remove remaining entries after random removal

ambrop7 %!s(int64=13) %!d(string=hai) anos
pai
achega
3aefca3015
Modificáronse 2 ficheiros con 38 adicións e 6 borrados
  1. 19 3
      examples/bavl_test.c
  2. 19 3
      examples/savl_test.c

+ 19 - 3
examples/bavl_test.c

@@ -77,20 +77,23 @@ int main (int argc, char **argv)
     verify(&avl);
     verify(&avl);
     
     
     printf("Inserting random values...\n");
     printf("Inserting random values...\n");
+    int inserted = 0;
     BRandom_randomize((uint8_t *)values_ins, num_nodes * sizeof(int));
     BRandom_randomize((uint8_t *)values_ins, num_nodes * sizeof(int));
     for (int i = 0; i < num_nodes; i++) {
     for (int i = 0; i < num_nodes; i++) {
         nodes[i].num = values_ins[i];
         nodes[i].num = values_ins[i];
         if (BAVL_Insert(&avl, &nodes[i].avl_node, NULL)) {
         if (BAVL_Insert(&avl, &nodes[i].avl_node, NULL)) {
             nodes[i].used = 1;
             nodes[i].used = 1;
+            inserted++;
         } else {
         } else {
             nodes[i].used = 0;
             nodes[i].used = 0;
             printf("Insert collision!\n");
             printf("Insert collision!\n");
         }
         }
     }
     }
+    printf("Inserted %d entries\n", inserted);
     verify(&avl);
     verify(&avl);
     
     
     printf("Removing random entries...\n");
     printf("Removing random entries...\n");
-    int removed = 0;
+    int removed1 = 0;
     BRandom_randomize((uint8_t *)values, num_random_delete * sizeof(int));
     BRandom_randomize((uint8_t *)values, num_random_delete * sizeof(int));
     for (int i = 0; i < num_random_delete; i++) {
     for (int i = 0; i < num_random_delete; i++) {
         int index = (((unsigned int *)values)[i] % num_nodes);
         int index = (((unsigned int *)values)[i] % num_nodes);
@@ -98,12 +101,25 @@ int main (int argc, char **argv)
         if (node->used) {
         if (node->used) {
             BAVL_Remove(&avl, &node->avl_node);
             BAVL_Remove(&avl, &node->avl_node);
             node->used = 0;
             node->used = 0;
-            removed++;
+            removed1++;
         }
         }
     }
     }
+    printf("Removed %d entries\n", removed1);
     verify(&avl);
     verify(&avl);
     
     
-    printf("Removed %d entries\n", removed);
+    printf("Removing remaining...\n");
+    int removed2 = 0;
+    while (!BAVL_IsEmpty(&avl)) {
+        struct mynode *node = UPPER_OBJECT(BAVL_GetFirst(&avl), struct mynode, avl_node);
+        ASSERT_FORCE(node->used)
+        BAVL_Remove(&avl, &node->avl_node);
+        node->used = 0;
+        removed2++;
+    }
+    printf("Removed %d entries\n", removed2);
+    ASSERT_FORCE(BAVL_IsEmpty(&avl))
+    ASSERT_FORCE(removed1 + removed2 == inserted)
+    verify(&avl);
     
     
     BFree(nodes);
     BFree(nodes);
     BFree(values_ins);
     BFree(values_ins);

+ 19 - 3
examples/savl_test.c

@@ -79,20 +79,23 @@ int main (int argc, char **argv)
     verify(&tree);
     verify(&tree);
     
     
     printf("Inserting random values...\n");
     printf("Inserting random values...\n");
+    int inserted = 0;
     BRandom_randomize((uint8_t *)values_ins, num_nodes * sizeof(int));
     BRandom_randomize((uint8_t *)values_ins, num_nodes * sizeof(int));
     for (int i = 0; i < num_nodes; i++) {
     for (int i = 0; i < num_nodes; i++) {
         nodes[i].num = values_ins[i];
         nodes[i].num = values_ins[i];
         if (MyTree_Insert(&tree, 0, &nodes[i], NULL)) {
         if (MyTree_Insert(&tree, 0, &nodes[i], NULL)) {
             nodes[i].used = 1;
             nodes[i].used = 1;
+            inserted++;
         } else {
         } else {
             nodes[i].used = 0;
             nodes[i].used = 0;
             printf("Insert collision!\n");
             printf("Insert collision!\n");
         }
         }
     }
     }
+    printf("Inserted %d entries\n", inserted);
     verify(&tree);
     verify(&tree);
     
     
     printf("Removing random entries...\n");
     printf("Removing random entries...\n");
-    int removed = 0;
+    int removed1 = 0;
     BRandom_randomize((uint8_t *)values, num_random_delete * sizeof(int));
     BRandom_randomize((uint8_t *)values, num_random_delete * sizeof(int));
     for (int i = 0; i < num_random_delete; i++) {
     for (int i = 0; i < num_random_delete; i++) {
         int index = (((unsigned int *)values)[i] % num_nodes);
         int index = (((unsigned int *)values)[i] % num_nodes);
@@ -100,12 +103,25 @@ int main (int argc, char **argv)
         if (node->used) {
         if (node->used) {
             MyTree_Remove(&tree, 0, node);
             MyTree_Remove(&tree, 0, node);
             node->used = 0;
             node->used = 0;
-            removed++;
+            removed1++;
         }
         }
     }
     }
+    printf("Removed %d entries\n", removed1);
     verify(&tree);
     verify(&tree);
     
     
-    printf("Removed %d entries\n", removed);
+    printf("Removing remaining...\n");
+    int removed2 = 0;
+    while (!MyTree_IsEmpty(&tree)) {
+        struct mynode *node = MyTree_GetFirst(&tree, 0);
+        ASSERT_FORCE(node->used)
+        MyTree_Remove(&tree, 0, node);
+        node->used = 0;
+        removed2++;
+    }
+    printf("Removed %d entries\n", removed2);
+    ASSERT_FORCE(MyTree_IsEmpty(&tree))
+    ASSERT_FORCE(removed1 + removed2 == inserted)
+    verify(&tree);
     
     
     BFree(nodes);
     BFree(nodes);
     BFree(values_ins);
     BFree(values_ins);