bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] tests: test-hash: avoid wholesale duplication


From: Jim Meyering
Subject: [PATCH] tests: test-hash: avoid wholesale duplication
Date: Fri, 19 Jun 2009 18:19:01 +0200

FYI, I've just pushed this no-semantic-change patch:

diff --git a/ChangeLog b/ChangeLog
index 876467c..16cbdbc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2009-06-19  Jim Meyering  <address@hidden>

+       tests: test-hash: avoid wholesale duplication
+       * tests/test-hash.c (main): Don't copy/paste a 60-line loop.
+       Instead, use a loop and add a single conditional.

Since this changes so much indentation, here's diff -b output:

diff --git a/tests/test-hash.c b/tests/test-hash.c
index 83ffdf7..b056d0a 100644
--- a/tests/test-hash.c
+++ b/tests/test-hash.c
@@ -93,10 +93,18 @@ int
 main (int argc, char **argv)
 {
   unsigned int i;
+  unsigned int k;
   unsigned int table_size[] = {1, 2, 3, 4, 5, 23, 53};
   Hash_table *ht;
   Hash_tuning tuning;

+  hash_reset_tuning (&tuning);
+  tuning.shrink_threshold = 0.3;
+  tuning.shrink_factor = 0.707;
+  tuning.growth_threshold = 1.5;
+  tuning.growth_factor = 2.0;
+  tuning.is_n_buckets = true;
+
   if (1 < argc)
     {
       unsigned int seed;
@@ -172,70 +180,6 @@ main (int argc, char **argv)
       hash_free (ht);
     }

-  /* Now, each entry is malloc'd.  */
-  ht = hash_initialize (4651, NULL, hash_pjw, hash_compare_strings, 
hash_freer);
-  ASSERT (ht);
-  for (i = 0; i < 10000; i++)
-    {
-      unsigned int op = rand () % 10;
-      switch (op)
-       {
-       case 0:
-       case 1:
-       case 2:
-       case 3:
-       case 4:
-       case 5:
-         {
-           char buf[50];
-           char const *p = uinttostr (i, buf);
-           insert_new (ht, xstrdup (p));
-         }
-         break;
-
-       case 6:
-         {
-           size_t n = hash_get_n_entries (ht);
-           ASSERT (hash_rehash (ht, n + rand () % 20));
-         }
-         break;
-
-       case 7:
-         {
-           size_t n = hash_get_n_entries (ht);
-           size_t delta = rand () % 20;
-           if (delta < n)
-             ASSERT (hash_rehash (ht, n - delta));
-         }
-         break;
-
-       case 8:
-       case 9:
-         {
-           /* Delete a random entry.  */
-           size_t n = hash_get_n_entries (ht);
-           if (n)
-             {
-               size_t k = rand () % n;
-               void const *p;
-               void *v;
-               for (p = hash_get_first (ht); k; --k, p = hash_get_next (ht, p))
-                 {
-                   /* empty */
-                 }
-               ASSERT (p);
-               v = hash_delete (ht, p);
-               ASSERT (v);
-               free (v);
-             }
-           break;
-         }
-       }
-      ASSERT (hash_table_ok (ht));
-    }
-
-  hash_free (ht);
-
   hash_reset_tuning (&tuning);
   tuning.shrink_threshold = 0.3;
   tuning.shrink_factor = 0.707;
@@ -249,8 +193,14 @@ main (int argc, char **argv)

   /* Alternate tuning.  */
   tuning.growth_threshold = 0.89;
-  ht = hash_initialize (4651, &tuning, hash_pjw, hash_compare_strings,
-                       hash_freer);
+
+  /* Run with default tuning, then with custom tuning settings.  */
+  for (k = 0; k < 2; k++)
+    {
+      Hash_tuning const *tune = (k == 0 ? NULL : &tuning);
+      /* Now, each entry is malloc'd.  */
+      ht = hash_initialize (4651, tune, hash_pjw,
+                           hash_compare_strings, hash_freer);
   ASSERT (ht);
   for (i = 0; i < 10000; i++)
     {
@@ -296,7 +246,8 @@ main (int argc, char **argv)
                size_t k = rand () % n;
                void const *p;
                void *v;
-               for (p = hash_get_first (ht); k; --k, p = hash_get_next (ht, p))
+                   for (p = hash_get_first (ht); k;
+                        --k, p = hash_get_next (ht, p))
                  {
                    /* empty */
                  }
@@ -312,6 +263,7 @@ main (int argc, char **argv)
     }

   hash_free (ht);
+    }

   return 0;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]