- /* 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);
-