X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-hash.c;h=dc80924d988332ce71b80a7dc5def9b34020680e;hb=1276a2c5f24c0c932426aca9c899fa524d2443f2;hp=baaab9a0c9bf67eaa8f5fa3d458ace55bfb4ed59;hpb=82381b9e5b37125305709d412d8322b35e5c4796;p=gnulib.git diff --git a/tests/test-hash.c b/tests/test-hash.c index baaab9a0c..dc80924d9 100644 --- a/tests/test-hash.c +++ b/tests/test-hash.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Free Software Foundation + * Copyright (C) 2009-2014 Free Software Foundation, Inc. * Written by Jim Meyering * * This program is free software: you can redistribute it and/or modify @@ -20,7 +20,6 @@ #include "hash.h" #include "hash-pjw.h" #include "inttostr.h" -#include "xalloc.h" #include #include @@ -28,21 +27,11 @@ #include #include +#include "macros.h" + #define STREQ(a, b) (strcmp (a, b) == 0) #define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) - static bool hash_compare_strings (void const *x, void const *y) { @@ -109,10 +98,10 @@ main (int argc, char **argv) { unsigned int seed; if (get_seed (argv[1], &seed) != 0) - { - fprintf (stderr, "invalid seed: %s\n", argv[1]); - exit (EXIT_FAILURE); - } + { + fprintf (stderr, "invalid seed: %s\n", argv[1]); + exit (EXIT_FAILURE); + } srand (seed); } @@ -124,11 +113,13 @@ main (int argc, char **argv) ASSERT (ht); insert_new (ht, "a"); { - char *str1 = xstrdup ("a"); - char *str2 = hash_insert (ht, str1); - ASSERT (str1 != str2); - ASSERT (STREQ (str1, str2)); - free (str1); + char *str1 = strdup ("a"); + char *str2; + ASSERT (str1); + str2 = hash_insert (ht, str1); + ASSERT (str1 != str2); + ASSERT (STREQ (str1, str2)); + free (str1); } insert_new (ht, "b"); insert_new (ht, "c"); @@ -136,10 +127,10 @@ main (int argc, char **argv) ASSERT (hash_do_for_each (ht, walk, &i) == 3); ASSERT (i == 7); { - void *buf[5] = { NULL }; - ASSERT (hash_get_entries (ht, NULL, 0) == 0); - ASSERT (hash_get_entries (ht, buf, 5) == 3); - ASSERT (STREQ (buf[0], "a") || STREQ (buf[0], "b") || STREQ (buf[0], "c")); + void *buf[5] = { NULL }; + ASSERT (hash_get_entries (ht, NULL, 0) == 0); + ASSERT (hash_get_entries (ht, buf, 5) == 3); + ASSERT (STREQ (buf[0], "a") || STREQ (buf[0], "b") || STREQ (buf[0], "c")); } ASSERT (hash_delete (ht, "a")); ASSERT (hash_delete (ht, "a") == NULL); @@ -171,11 +162,12 @@ main (int argc, char **argv) ht = hash_initialize (sz, NULL, NULL, NULL, NULL); ASSERT (ht); { - char *str = xstrdup ("a"); - insert_new (ht, "a"); - insert_new (ht, str); - ASSERT (hash_lookup (ht, str) == str); - free (str); + char *str = strdup ("a"); + ASSERT (str); + insert_new (ht, "a"); + insert_new (ht, str); + ASSERT (hash_lookup (ht, str) == str); + free (str); } hash_free (ht); } @@ -188,7 +180,7 @@ main (int argc, char **argv) tuning.is_n_buckets = true; /* Invalid tuning. */ ht = hash_initialize (4651, &tuning, hash_pjw, hash_compare_strings, - hash_freer); + hash_freer); ASSERT (!ht); /* Alternate tuning. */ @@ -200,67 +192,69 @@ main (int argc, char **argv) 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); + 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; + { + 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); + char *p_dup = strdup (p); + ASSERT (p_dup); + insert_new (ht, p_dup); + } + break; - case 6: - { - size_t n = hash_get_n_entries (ht); - ASSERT (hash_rehash (ht, n + rand () % 20)); - } - 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 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 kk = rand () % n; - void const *p; - void *v; - for (p = hash_get_first (ht); kk; - --kk, p = hash_get_next (ht, p)) - { - /* empty */ - } - ASSERT (p); - v = hash_delete (ht, p); - ASSERT (v); - free (v); - } - break; - } - } - ASSERT (hash_table_ok (ht)); - } + case 8: + case 9: + { + /* Delete a random entry. */ + size_t n = hash_get_n_entries (ht); + if (n) + { + size_t kk = rand () % n; + void const *p; + void *v; + for (p = hash_get_first (ht); kk; + --kk, 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); }