X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=eglib%2Ftest%2Fhashtable.c;h=8eb98852fd161ff7b457cec2a120c1845a4661e1;hb=f1ff42789be45c30cf3537ee986529179870df1e;hp=0b2f20ca5dfd4c28271334d4a0a7132fafa5e9c2;hpb=53e266903ec6b2d822cf5b0c566f6374df5307a4;p=mono.git diff --git a/eglib/test/hashtable.c b/eglib/test/hashtable.c index 0b2f20ca5df..8eb98852fd1 100644 --- a/eglib/test/hashtable.c +++ b/eglib/test/hashtable.c @@ -131,12 +131,45 @@ RESULT hash_grow (void) return NULL; } +RESULT hash_iter (void) +{ +#if !defined(GLIB_MAJOR_VERSION) || GLIB_CHECK_VERSION(2, 16, 0) + GHashTable *hash = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); + GHashTableIter iter; + int i, sum, keys_sum, values_sum; + gpointer key, value; + + sum = 0; + for (i = 0; i < 1000; i++) { + sum += i; + g_hash_table_insert (hash, GUINT_TO_POINTER (i), GUINT_TO_POINTER (i)); + } + + keys_sum = values_sum = 0; + g_hash_table_iter_init (&iter, hash); + while (g_hash_table_iter_next (&iter, &key, &value)) { + if (key != value) + return FAILED ("key != value"); + keys_sum += GPOINTER_TO_UINT (key); + values_sum += GPOINTER_TO_UINT (value); + } + if (keys_sum != sum || values_sum != sum) + return FAILED ("Did not find all key-value pairs"); + g_hash_table_destroy (hash); + return NULL; +#else + /* GHashTableIter was added in glib 2.16 */ + return NULL; +#endif +} + static Test hashtable_tests [] = { {"t1", hash_t1}, {"t2", hash_t2}, {"grow", hash_grow}, {"default", hash_default}, {"null_lookup", hash_null_lookup}, + {"iter", hash_iter}, {NULL, NULL} };