Datum chash_search_test(PG_FUNCTION_ARGS);
Datum chash_delete_test(PG_FUNCTION_ARGS);
Datum chash_concurrent_test(PG_FUNCTION_ARGS);
+Datum chash_collision_test(PG_FUNCTION_ARGS);
Datum dynahash_insert_test(PG_FUNCTION_ARGS);
Datum dynahash_search_test(PG_FUNCTION_ARGS);
Datum dynahash_delete_test(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(chash_insert_test);
PG_FUNCTION_INFO_V1(chash_search_test);
PG_FUNCTION_INFO_V1(chash_delete_test);
+PG_FUNCTION_INFO_V1(chash_concurrent_test);
+PG_FUNCTION_INFO_V1(chash_collision_test);
PG_FUNCTION_INFO_V1(dynahash_insert_test);
PG_FUNCTION_INFO_V1(dynahash_search_test);
PG_FUNCTION_INFO_V1(dynahash_delete_test);
PG_RETURN_VOID();
}
+Datum
+chash_collision_test(PG_FUNCTION_ARGS)
+{
+ uint32 i;
+ hentry e;
+
+ /* Don't stack-allocate this. */
+ static bool mine[10000];
+
+ memset(mine, 0, 10000 * sizeof(bool));
+
+ for (i = 0; i < 10000; ++i)
+ {
+ bool ok;
+
+ e.key = i;
+ e.val = MyProcPid;
+ ok = CHashInsert(chash, &e);
+ if (ok)
+ mine[i] = true;
+ }
+
+ for (i = 0; i < 10000; ++i)
+ {
+ bool ok;
+
+ if (!mine[i])
+ continue;
+ e.key = i;
+ ok = CHashSearch(chash, &e);
+ if (!ok)
+ elog(LOG, "search %u: not found", i);
+ if (e.val != MyProcPid)
+ elog(LOG, "search %u: expected %u found %u",
+ i, (unsigned) MyProcPid, e.val);
+ ok = CHashDelete(chash, &e);
+ if (!ok)
+ elog(LOG, "delete %u: not found", i);
+ }
+
+ PG_RETURN_VOID();
+}
+
static bool
dynahash_insert(uint32 key, uint32 val)
{