#include #include #include #include #define DH_IMPLEMENT_HERE #include "dh_cuts.h" #define HT_IMPLEMENT_HERE #include "hashtable.h" #define NUM_ITERATIONS 5000 void test_insertions(void) { dh_push("batch insertions and lookups"); struct HT ht = htNew(500, sizeof(int)); int values[NUM_ITERATIONS]; char const *keys[NUM_ITERATIONS]; for (int i = 0; i < NUM_ITERATIONS; ++i) { dh_push("insertion #%d", i); int rd = rand() % 0xFFFF; char buf[50]; sprintf(buf, "%x", rd); char const *name = strdup(buf); htSet(&ht, name, strlen(name), &rd); values[i] = rd; keys[i] = name; dh_pop(); } for (int i = 0; i < NUM_ITERATIONS; ++i) { dh_push("lookup #%d", i); int has = htHas(&ht, keys[i], strlen(keys[i])); dh_assert(has); if (has) { dh_assertiq(*(int*)htGet(&ht, keys[i], strlen(keys[i])), values[i]); } dh_pop(); } htFree(&ht); dh_pop(); } void hashtable_suite(void) { dh_push("hashtable"); dh_branch( test_insertions(); ) dh_pop(); } int main() { dh_init(stdout); hashtable_suite(); dh_summarize(); return EXIT_SUCCESS; }