[glib] Move hash tests to the test framework



commit 2f438f18ae8794747dadf5018616d1dcc52a0924
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Jun 21 23:06:17 2010 -0400

    Move hash tests to the test framework

 glib/tests/Makefile.am                 |    3 +
 tests/hash-test.c => glib/tests/hash.c |  220 +++++++++++++++++++++-----------
 tests/.gitignore                       |    1 -
 tests/Makefile.am                      |    2 -
 4 files changed, 146 insertions(+), 80 deletions(-)
---
diff --git a/glib/tests/Makefile.am b/glib/tests/Makefile.am
index 1e81f60..2735c15 100644
--- a/glib/tests/Makefile.am
+++ b/glib/tests/Makefile.am
@@ -87,6 +87,9 @@ utf8_misc_LDADD       = $(progs_ldadd)
 TEST_PROGS         += checksum
 checksum_LDADD       = $(progs_ldadd)
 
+TEST_PROGS         += hash
+hash_LDADD       = $(progs_ldadd)
+
 if OS_UNIX
 
 # some testing of gtester funcitonality
diff --git a/tests/hash-test.c b/glib/tests/hash.c
similarity index 63%
rename from tests/hash-test.c
rename to glib/tests/hash.c
index 23411c3..6dac989 100644
--- a/tests/hash-test.c
+++ b/glib/tests/hash.c
@@ -91,8 +91,8 @@ handle_pair (gpointer key, gpointer value, int result_array[10000])
 
 static gboolean
 my_hash_callback_remove (gpointer key,
-			 gpointer value,
-			 gpointer user_data)
+                         gpointer value,
+                         gpointer user_data)
 {
   int *d = value;
 
@@ -104,8 +104,8 @@ my_hash_callback_remove (gpointer key,
 
 static void
 my_hash_callback_remove_test (gpointer key,
-			      gpointer value,
-			      gpointer user_data)
+                              gpointer value,
+                              gpointer user_data)
 {
   int *d = value;
 
@@ -115,8 +115,8 @@ my_hash_callback_remove_test (gpointer key,
 
 static void
 my_hash_callback (gpointer key,
-		  gpointer value,
-		  gpointer user_data)
+                  gpointer value,
+                  gpointer user_data)
 {
   handle_pair (key, value, user_data);
 }
@@ -129,7 +129,7 @@ my_hash (gconstpointer key)
 
 static gboolean
 my_hash_equal (gconstpointer a,
-	       gconstpointer b)
+               gconstpointer b)
 {
   return *((const gint*) a) == *((const gint*) b);
 }
@@ -150,17 +150,17 @@ my_hash_equal (gconstpointer a,
  * implicit.  IT MUST ALSO BE THE CASE that the coefficients of orders
  * 31 down to 25 are zero.  Happily, we have candidates, from
  * E. J.  Watson, "Primitive Polynomials (Mod 2)", Math. Comp. 16 (1962):
- *	x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + x^0
- *	x^31 + x^3 + x^0
+ *      x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + x^0
+ *      x^31 + x^3 + x^0
  *
  * We reverse the bits to get:
- *	111101010000000000000000000000001 but drop the last 1
+ *      111101010000000000000000000000001 but drop the last 1
  *         f   5   0   0   0   0   0   0
- *	010010000000000000000000000000001 ditto, for 31-bit crc
- *	   4   8   0   0   0   0   0   0
+ *      010010000000000000000000000000001 ditto, for 31-bit crc
+ *         4   8   0   0   0   0   0   0
  */
 
-#define POLY 0x48000000L	/* 31-bit polynomial (avoids sign problems) */
+#define POLY 0x48000000L        /* 31-bit polynomial (avoids sign problems) */
 
 static guint CrcTable[128];
 
@@ -169,16 +169,16 @@ static guint CrcTable[128];
  */
 static void crcinit(void)
 {
-	int i, j;
-	guint sum;
-
-	for (i = 0; i < 128; ++i) {
-		sum = 0L;
-		for (j = 7 - 1; j >= 0; --j)
-			if (i & (1 << j))
-				sum ^= POLY >> j;
-		CrcTable[i] = sum;
-	}
+        int i, j;
+        guint sum;
+
+        for (i = 0; i < 128; ++i) {
+                sum = 0L;
+                for (j = 7 - 1; j >= 0; --j)
+                        if (i & (1 << j))
+                                sum ^= POLY >> j;
+                CrcTable[i] = sum;
+        }
 }
 
 /*
@@ -186,20 +186,20 @@ static void crcinit(void)
  */
 static guint honeyman_hash(gconstpointer key)
 {
-	const gchar *name = (const gchar *) key;
-	gint size;
-	guint sum = 0;
+        const gchar *name = (const gchar *) key;
+        gint size;
+        guint sum = 0;
 
-	g_assert (name != NULL);
-	g_assert (*name != 0);
+        g_assert (name != NULL);
+        g_assert (*name != 0);
 
-	size = strlen(name);
+        size = strlen(name);
 
-	while (size--) {
-		sum = (sum >> 7) ^ CrcTable[(sum ^ (*name++)) & 0x7f];
-	}
+        while (size--) {
+                sum = (sum >> 7) ^ CrcTable[(sum ^ (*name++)) & 0x7f];
+        }
 
-	return(sum);
+        return(sum);
 }
 
 
@@ -217,8 +217,8 @@ static guint one_hash(gconstpointer key)
 
 
 static void not_even_foreach (gpointer       key,
-				 gpointer       value,
-				 gpointer	user_data)
+                                 gpointer       value,
+                                 gpointer       user_data)
 {
   const char *_key = (const char *) key;
   const char *_value = (const char *) value;
@@ -241,8 +241,8 @@ static void not_even_foreach (gpointer       key,
 
 
 static gboolean remove_even_foreach (gpointer       key,
-				 gpointer       value,
-				 gpointer	user_data)
+                                 gpointer       value,
+                                 gpointer       user_data)
 {
   const char *_key = (const char *) key;
   const char *_value = (const char *) value;
@@ -265,8 +265,10 @@ static gboolean remove_even_foreach (gpointer       key,
 
 
 
-static void second_hash_test (gboolean simple_hash)
+static void second_hash_test (gconstpointer d)
 {
+     gboolean simple_hash = GPOINTER_TO_INT (d);
+
      int       i;
      char      key[20] = "", val[20]="", *v, *orig_key, *orig_val;
      GHashTable     *h;
@@ -275,16 +277,16 @@ static void second_hash_test (gboolean simple_hash)
      crcinit ();
 
      h = g_hash_table_new_full (simple_hash ? one_hash : honeyman_hash,
-     			        second_hash_cmp,
+                                second_hash_cmp,
                                 g_free, g_free);
      g_assert (h != NULL);
      for (i=0; i<20; i++)
           {
           sprintf (key, "%d", i);
-	  g_assert (atoi (key) == i);
+          g_assert (atoi (key) == i);
 
-	  sprintf (val, "%d value", i);
-	  g_assert (atoi (val) == i);
+          sprintf (val, "%d value", i);
+          g_assert (atoi (val) == i);
 
           g_hash_table_insert (h, g_strdup (key), g_strdup (val));
           }
@@ -294,13 +296,13 @@ static void second_hash_test (gboolean simple_hash)
      for (i=0; i<20; i++)
           {
           sprintf (key, "%d", i);
-	  g_assert (atoi(key) == i);
+          g_assert (atoi(key) == i);
 
           v = (char *) g_hash_table_lookup (h, key);
 
-	  g_assert (v != NULL);
-	  g_assert (*v != 0);
-	  g_assert (atoi (v) == i);
+          g_assert (v != NULL);
+          g_assert (*v != 0);
+          g_assert (atoi (v) == i);
           }
 
      sprintf (key, "%d", 3);
@@ -313,36 +315,36 @@ static void second_hash_test (gboolean simple_hash)
      for (i=0; i<20; i++)
           {
           sprintf (key, "%d", i);
-	  g_assert (atoi(key) == i);
+          g_assert (atoi(key) == i);
 
-	  sprintf (val, "%d value", i);
-	  g_assert (atoi (val) == i);
+          sprintf (val, "%d value", i);
+          g_assert (atoi (val) == i);
 
-	  orig_key = orig_val = NULL;
+          orig_key = orig_val = NULL;
           found = g_hash_table_lookup_extended (h, key,
-	  					(gpointer)&orig_key,
-						(gpointer)&orig_val);
-	  if ((i % 2) == 0 || i == 3)
+                                                (gpointer)&orig_key,
+                                                (gpointer)&orig_val);
+          if ((i % 2) == 0 || i == 3)
             {
               g_assert (!found);
-  	      continue;
+              continue;
             }
 
-	  g_assert (found);
+          g_assert (found);
 
-	  g_assert (orig_key != NULL);
-	  g_assert (strcmp (key, orig_key) == 0);
+          g_assert (orig_key != NULL);
+          g_assert (strcmp (key, orig_key) == 0);
 
-	  g_assert (orig_val != NULL);
-	  g_assert (strcmp (val, orig_val) == 0);
+          g_assert (orig_val != NULL);
+          g_assert (strcmp (val, orig_val) == 0);
           }
 
     g_hash_table_destroy (h);
 }
 
 static gboolean find_first     (gpointer key, 
-				gpointer value, 
-				gpointer user_data)
+                                gpointer value, 
+                                gpointer user_data)
 {
   gint *v = value; 
   gint *test = user_data;
@@ -360,7 +362,7 @@ static void direct_hash_test (void)
      for (i=1; i<=20; i++)
           {
           g_hash_table_insert (h, GINT_TO_POINTER (i),
-	  		       GINT_TO_POINTER (i + 42));
+                               GINT_TO_POINTER (i + 42));
           }
 
      g_assert (g_hash_table_size (h) == 20);
@@ -368,20 +370,17 @@ static void direct_hash_test (void)
      for (i=1; i<=20; i++)
           {
           rc = GPOINTER_TO_INT (
-	  	g_hash_table_lookup (h, GINT_TO_POINTER (i)));
+                g_hash_table_lookup (h, GINT_TO_POINTER (i)));
 
-	  g_assert (rc != 0);
-	  g_assert ((rc - 42) == i);
+          g_assert (rc != 0);
+          g_assert ((rc - 42) == i);
           }
 
     g_hash_table_destroy (h);
 }
 
-
-
-int
-main (int   argc,
-      char *argv[])
+static void
+test_hash_misc (void)
 {
   GHashTable *hash_table;
   gint i;
@@ -392,7 +391,7 @@ main (int   argc,
   GHashTableIter iter;
   gpointer ikey, ivalue;
   int result_array[10000];
-  
+
   hash_table = g_hash_table_new (my_hash, my_hash_equal);
   fill_hash_table_and_array (hash_table);
   pvalue = g_hash_table_find (hash_table, find_first, &value);
@@ -424,7 +423,7 @@ main (int   argc,
       handle_pair (ikey, ivalue, result_array);
 
       if (i % 2)
-	g_hash_table_iter_remove (&iter);
+        g_hash_table_iter_remove (&iter);
     }
   g_assert (! g_hash_table_iter_next (&iter, &ikey, &ivalue));
   g_assert (g_hash_table_size (hash_table) == 5000);
@@ -446,14 +445,81 @@ main (int   argc,
     g_assert_not_reached();
 
   g_hash_table_foreach (hash_table, my_hash_callback_remove_test, NULL);
+  g_hash_table_destroy (hash_table);
+}
 
+static gint destroy_counter;
 
-  g_hash_table_destroy (hash_table);
+static void
+value_destroy (gpointer value)
+{
+  destroy_counter++;
+}
+
+static void
+test_hash_ref (void)
+{
+  GHashTable *h;
+  GHashTableIter iter;
+  gchar *key, *value;
+  gboolean abc_seen = FALSE;
+  gboolean cde_seen = FALSE;
+  gboolean xyz_seen = FALSE;
+
+  h = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, value_destroy);
+  g_hash_table_insert (h, "abc", "ABC");
+  g_hash_table_insert (h, "cde", "CDE");
+  g_hash_table_insert (h, "xyz", "XYZ");
+
+  g_assert_cmpint (g_hash_table_size (h), == , 3);
+
+  g_hash_table_iter_init (&iter, h);
+
+  while (g_hash_table_iter_next (&iter, (gpointer*)&key, (gpointer*)&value))
+    {
+      if (strcmp (key, "abc") == 0)
+        {
+          g_assert_cmpstr (value, ==, "ABC");
+          abc_seen = TRUE;
+          g_hash_table_iter_steal (&iter);
+        }
+      else if (strcmp (key, "cde") == 0)
+        {
+          g_assert_cmpstr (value, ==, "CDE");
+          cde_seen = TRUE;
+        }
+      else if (strcmp (key, "xyz") == 0)
+        {
+          g_assert_cmpstr (value, ==, "XYZ");
+          xyz_seen = TRUE;
+        }
+    }
+  g_assert_cmpint (destroy_counter, ==, 0);
+
+  g_assert (g_hash_table_iter_get_hash_table (&iter) == h);
+  g_assert (abc_seen && cde_seen && xyz_seen);
+  g_assert_cmpint (g_hash_table_size (h), == , 2);
+
+  g_hash_table_ref (h);
+  g_hash_table_destroy (h);
+  g_assert_cmpint (g_hash_table_size (h), == , 0);
+  g_assert_cmpint (destroy_counter, ==, 2);
+  g_hash_table_insert (h, "uvw", "UVW");
+  g_hash_table_unref (h);
+  g_assert_cmpint (destroy_counter, ==, 3);
+}
+
+int
+main (int argc, char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
 
-  second_hash_test (TRUE);
-  second_hash_test (FALSE);
-  direct_hash_test ();
+  g_test_add_func ("/hash/misc", test_hash_misc);
+  g_test_add_data_func ("/hash/one", GINT_TO_POINTER (TRUE), second_hash_test);
+  g_test_add_data_func ("/hash/honeyman", GINT_TO_POINTER (FALSE), second_hash_test);
+  g_test_add_func ("/hash/direct", direct_hash_test);
+  g_test_add_func ("/hash/ref", test_hash_ref);
 
-  return 0;
+  return g_test_run ();
 
 }
diff --git a/tests/.gitignore b/tests/.gitignore
index c4dbf23..6b01940 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -20,7 +20,6 @@ errorcheck-mutex-test
 file-test
 file-test-get-contents
 gio-test
-hash-test
 iochannel-test
 iochannel-test-outfile
 list-test
diff --git a/tests/Makefile.am b/tests/Makefile.am
index fe1c185..8e42af1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -95,7 +95,6 @@ test_programs =					\
 	file-test				\
 	env-test				\
 	gio-test				\
-	hash-test				\
 	iochannel-test				\
 	list-test				\
 	mainloop-test				\
@@ -153,7 +152,6 @@ dirname_test_LDADD = $(progs_ldadd)
 file_test_LDADD = $(progs_ldadd)
 env_test_LDADD = $(progs_ldadd)
 gio_test_LDADD = $(progs_ldadd)
-hash_test_LDADD = $(progs_ldadd)
 iochannel_test_LDADD = $(progs_ldadd)
 list_test_LDADD = $(progs_ldadd)
 mainloop_test_LDADD = $(thread_ldadd)



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