X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flibpspp%2Fhmap-test.c;h=bbe341388a3ce530b26957afd8e89a3df586d6c1;hb=91c50c1bf38fa2377a685343608b88915aa0168a;hp=f9d963d83bca459067d6fbcaea96a3355089f665;hpb=19a9c720bb5cae2826e6983bdab72a9c4b74492d;p=pspp diff --git a/tests/libpspp/hmap-test.c b/tests/libpspp/hmap-test.c index f9d963d83b..bbe341388a 100644 --- a/tests/libpspp/hmap-test.c +++ b/tests/libpspp/hmap-test.c @@ -915,6 +915,45 @@ test_swap_random_hash (void) test_swap (128, random_hash); } +/* Inserts elements into an hmap in ascending order, then clears the hash table + using hmap_clear(). */ +static void +test_clear (void) +{ + const int max_elems = 128; + struct element *elements; + int *values; + struct hmap hmap; + int cnt; + +#if __GNUC__ == 4 && __GNUC_MINOR__ == 3 + return; +#endif /* GCC 4.3 */ + + elements = xnmalloc (max_elems, sizeof *elements); + values = xnmalloc (max_elems, sizeof *values); + + for (cnt = 0; cnt <= max_elems; cnt++) + { + int i; + + hmap_init (&hmap); + for (i = 0; i < cnt; i++) + { + values[i] = elements[i].data = i; + hmap_insert (&hmap, &elements[i].node, + random_hash (elements[i].data)); + check_hmap (&hmap, values, i + 1, random_hash); + } + hmap_clear (&hmap); + check_hmap (&hmap, NULL, 0, random_hash); + hmap_destroy (&hmap); + } + + free (elements); + free (values); +} + static void test_destroy_null (void) { @@ -999,6 +1038,8 @@ main (void) run_test (test_swap_random_hash, "test swapping tables"); + run_test (test_clear, "test clearing hash table"); + run_test (test_destroy_null, "test destroying null table"); run_test (test_shrink_empty, "test shrinking an empty table");