52 "all ones",
"1111111111",
56 "alternating bits",
"0101010101",
60 "clusters of ten",
"1111111111",
64 "clusters of hundred",
65 "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
73 "sparse",
"100000000000000000000000000000001",
77 "single values, distance > 2^32",
"1",
81 "clusters, distance > 2^32",
"10101010",
85 "clusters, distance > 2^60",
"10101010",
144 elog(
NOTICE,
"testing intset with pattern \"%s\"",
spec->test_name);
152 for (
int i = 0;
i < patternlen;
i++)
154 if (
spec->pattern_str[
i] ==
'1')
199 spec->num_values, (
int) (
endtime - starttime) / 1000);
227 if (n !=
spec->num_values)
235 for (n = 0; n < 100000; n++)
257 if (
idx >= patternlen)
259 else if (
spec->pattern_str[
idx] ==
'1')
274 n, (
int) (
endtime - starttime) / 1000);
303 n, (
int) (
endtime - starttime) / 1000);
307 if (n >
spec->num_values)
332 if (num_entries != 1)
340 elog(
ERROR,
"intset_is_member failed for 0");
342 elog(
ERROR,
"intset_is_member failed for 1");
344 elog(
ERROR,
"intset_is_member failed for PG_UINT64_MAX");
346 elog(
ERROR,
"intset_is_member failed for the tested value");
409 if (num_entries != n)
489 elog(
NOTICE,
"testing intset with empty set");
495 elog(
ERROR,
"intset_is_member on empty set returned true");
497 elog(
ERROR,
"intset_is_member on empty set returned true");
499 elog(
ERROR,
"intset_is_member on empty set returned true");
524 elog(
NOTICE,
"testing intset with distances > 2^60 between values");
568 while (num_values < 1000)
576 for (
int i = 0;
i < num_values;
i++)
582 for (
int i = 0;
i < num_values;
i++)
610 for (
int i = 0;
i < num_values;
i++)
Datum intset(PG_FUNCTION_ARGS)
Datum idx(PG_FUNCTION_ARGS)
TimestampTz GetCurrentTimestamp(void)
static Datum values[MAXATTR]
#define fprintf(file, fmt, msg)
#define palloc_array(type, count)
#define PG_FUNCTION_INFO_V1(funcname)
uint64 intset_memory_usage(IntegerSet *intset)
uint64 intset_num_entries(IntegerSet *intset)
bool intset_is_member(IntegerSet *intset, uint64 x)
void intset_begin_iterate(IntegerSet *intset)
bool intset_iterate_next(IntegerSet *intset, uint64 *next)
IntegerSet * intset_create(void)
void intset_add_member(IntegerSet *intset, uint64 x)
MemoryContext CurrentMemoryContext
void MemoryContextStats(MemoryContext context)
void MemoryContextDelete(MemoryContext context)
void MemoryContextSetIdentifier(MemoryContext context, const char *id)
#define AllocSetContextCreate
#define ALLOCSET_SMALL_SIZES
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
uint64 pg_prng_uint64_range(pg_prng_state *state, uint64 rmin, uint64 rmax)
uint32 pg_prng_uint32(pg_prng_state *state)
pg_prng_state pg_global_prng_state
static void test_pattern(const test_spec *spec)
static const bool intset_test_stats
Datum test_integerset(PG_FUNCTION_ARGS)
static void test_single_value(uint64 value)
static void test_empty(void)
static const test_spec test_specs[]
static void test_single_value_and_filler(uint64 value, uint64 filler_min, uint64 filler_max)
static void check_with_filler(IntegerSet *intset, uint64 x, uint64 value, uint64 filler_min, uint64 filler_max)
static void test_huge_distances(void)