PostgreSQL Source Code git master
Loading...
Searching...
No Matches
test_bitmapset.c File Reference
#include "postgres.h"
#include <stddef.h>
#include "catalog/pg_type.h"
#include "common/pg_prng.h"
#include "fmgr.h"
#include "miscadmin.h"
#include "nodes/bitmapset.h"
#include "nodes/nodes.h"
#include "nodes/pg_list.h"
#include "utils/array.h"
#include "utils/builtins.h"
#include "utils/timestamp.h"
Include dependency graph for test_bitmapset.c:

Go to the source code of this file.

Macros

#define EXPECT_TRUE(expr)
 
#define EXPECT_NOT_NULL(expr)
 
#define BITMAPSET_TO_TEXT(bms)   cstring_to_text(nodeToString(bms))
 
#define TEXT_TO_BITMAPSET(str)   ((Bitmapset *) stringToNode(text_to_cstring(str)))
 
#define PG_ARG_GETBITMAPSET(n)    (PG_ARGISNULL(n) ? NULL : TEXT_TO_BITMAPSET(PG_GETARG_TEXT_PP(n)))
 
#define PG_RETURN_BITMAPSET_AS_TEXT(bms)    PG_RETURN_TEXT_P(BITMAPSET_TO_TEXT(bms))
 

Functions

 PG_FUNCTION_INFO_V1 (test_bms_make_singleton)
 
 PG_FUNCTION_INFO_V1 (test_bms_add_member)
 
 PG_FUNCTION_INFO_V1 (test_bms_del_member)
 
 PG_FUNCTION_INFO_V1 (test_bms_is_member)
 
 PG_FUNCTION_INFO_V1 (test_bms_num_members)
 
 PG_FUNCTION_INFO_V1 (test_bms_copy)
 
 PG_FUNCTION_INFO_V1 (test_bms_equal)
 
 PG_FUNCTION_INFO_V1 (test_bms_compare)
 
 PG_FUNCTION_INFO_V1 (test_bms_is_subset)
 
 PG_FUNCTION_INFO_V1 (test_bms_subset_compare)
 
 PG_FUNCTION_INFO_V1 (test_bms_union)
 
 PG_FUNCTION_INFO_V1 (test_bms_intersect)
 
 PG_FUNCTION_INFO_V1 (test_bms_difference)
 
 PG_FUNCTION_INFO_V1 (test_bms_offset_members)
 
 PG_FUNCTION_INFO_V1 (test_bms_is_empty)
 
 PG_FUNCTION_INFO_V1 (test_bms_membership)
 
 PG_FUNCTION_INFO_V1 (test_bms_singleton_member)
 
 PG_FUNCTION_INFO_V1 (test_bms_get_singleton_member)
 
 PG_FUNCTION_INFO_V1 (test_bms_next_member)
 
 PG_FUNCTION_INFO_V1 (test_bms_prev_member)
 
 PG_FUNCTION_INFO_V1 (test_bms_hash_value)
 
 PG_FUNCTION_INFO_V1 (test_bms_overlap)
 
 PG_FUNCTION_INFO_V1 (test_bms_overlap_list)
 
 PG_FUNCTION_INFO_V1 (test_bms_nonempty_difference)
 
 PG_FUNCTION_INFO_V1 (test_bms_member_index)
 
 PG_FUNCTION_INFO_V1 (test_bms_add_range)
 
 PG_FUNCTION_INFO_V1 (test_bms_add_members)
 
 PG_FUNCTION_INFO_V1 (test_bms_int_members)
 
 PG_FUNCTION_INFO_V1 (test_bms_del_members)
 
 PG_FUNCTION_INFO_V1 (test_bms_replace_members)
 
 PG_FUNCTION_INFO_V1 (test_bms_join)
 
 PG_FUNCTION_INFO_V1 (test_bitmap_hash)
 
 PG_FUNCTION_INFO_V1 (test_bitmap_match)
 
 PG_FUNCTION_INFO_V1 (test_random_operations)
 
 PG_FUNCTION_INFO_V1 (test_random_offset_operations)
 
Datum test_bms_add_member (PG_FUNCTION_ARGS)
 
Datum test_bms_add_members (PG_FUNCTION_ARGS)
 
Datum test_bms_del_member (PG_FUNCTION_ARGS)
 
Datum test_bms_is_member (PG_FUNCTION_ARGS)
 
Datum test_bms_num_members (PG_FUNCTION_ARGS)
 
Datum test_bms_make_singleton (PG_FUNCTION_ARGS)
 
Datum test_bms_copy (PG_FUNCTION_ARGS)
 
Datum test_bms_equal (PG_FUNCTION_ARGS)
 
Datum test_bms_union (PG_FUNCTION_ARGS)
 
Datum test_bms_membership (PG_FUNCTION_ARGS)
 
Datum test_bms_next_member (PG_FUNCTION_ARGS)
 
Datum test_bms_intersect (PG_FUNCTION_ARGS)
 
Datum test_bms_difference (PG_FUNCTION_ARGS)
 
Datum test_bms_offset_members (PG_FUNCTION_ARGS)
 
Datum test_bms_compare (PG_FUNCTION_ARGS)
 
Datum test_bms_is_empty (PG_FUNCTION_ARGS)
 
Datum test_bms_is_subset (PG_FUNCTION_ARGS)
 
Datum test_bms_subset_compare (PG_FUNCTION_ARGS)
 
Datum test_bms_singleton_member (PG_FUNCTION_ARGS)
 
Datum test_bms_get_singleton_member (PG_FUNCTION_ARGS)
 
Datum test_bms_prev_member (PG_FUNCTION_ARGS)
 
Datum test_bms_overlap (PG_FUNCTION_ARGS)
 
Datum test_bms_overlap_list (PG_FUNCTION_ARGS)
 
Datum test_bms_nonempty_difference (PG_FUNCTION_ARGS)
 
Datum test_bms_member_index (PG_FUNCTION_ARGS)
 
Datum test_bms_add_range (PG_FUNCTION_ARGS)
 
Datum test_bms_int_members (PG_FUNCTION_ARGS)
 
Datum test_bms_del_members (PG_FUNCTION_ARGS)
 
Datum test_bms_replace_members (PG_FUNCTION_ARGS)
 
Datum test_bms_join (PG_FUNCTION_ARGS)
 
Datum test_bms_hash_value (PG_FUNCTION_ARGS)
 
Datum test_bitmap_hash (PG_FUNCTION_ARGS)
 
Datum test_bitmap_match (PG_FUNCTION_ARGS)
 
Datum test_random_operations (PG_FUNCTION_ARGS)
 
Datum test_random_offset_operations (PG_FUNCTION_ARGS)
 

Variables

 PG_MODULE_MAGIC
 

Macro Definition Documentation

◆ BITMAPSET_TO_TEXT

#define BITMAPSET_TO_TEXT (   bms)    cstring_to_text(nodeToString(bms))

Definition at line 90 of file test_bitmapset.c.

◆ EXPECT_NOT_NULL

#define EXPECT_NOT_NULL (   expr)
Value:
do { \
if ((expr) == NULL) \
"%s was unexpectedly true in file \"%s\" line %u", \
#expr, __FILE__, __LINE__); \
} while (0)
#define ERROR
Definition elog.h:40
static int fb(int x)

Definition at line 81 of file test_bitmapset.c.

82 { \
83 if ((expr) == NULL) \
84 elog(ERROR, \
85 "%s was unexpectedly true in file \"%s\" line %u", \
86 #expr, __FILE__, __LINE__); \
87 } while (0)

◆ EXPECT_TRUE

#define EXPECT_TRUE (   expr)
Value:
do { \
if (!(expr)) \
"%s was unexpectedly false in file \"%s\" line %u", \
#expr, __FILE__, __LINE__); \
} while (0)

Definition at line 73 of file test_bitmapset.c.

74 { \
75 if (!(expr)) \
76 elog(ERROR, \
77 "%s was unexpectedly false in file \"%s\" line %u", \
78 #expr, __FILE__, __LINE__); \
79 } while (0)

◆ PG_ARG_GETBITMAPSET

#define PG_ARG_GETBITMAPSET (   n)     (PG_ARGISNULL(n) ? NULL : TEXT_TO_BITMAPSET(PG_GETARG_TEXT_PP(n)))

Definition at line 97 of file test_bitmapset.c.

#define PG_GETARG_TEXT_PP(n)
Definition fmgr.h:310
#define TEXT_TO_BITMAPSET(str)

◆ PG_RETURN_BITMAPSET_AS_TEXT

#define PG_RETURN_BITMAPSET_AS_TEXT (   bms)     PG_RETURN_TEXT_P(BITMAPSET_TO_TEXT(bms))

Definition at line 104 of file test_bitmapset.c.

◆ TEXT_TO_BITMAPSET

#define TEXT_TO_BITMAPSET (   str)    ((Bitmapset *) stringToNode(text_to_cstring(str)))

Definition at line 91 of file test_bitmapset.c.

Function Documentation

◆ PG_FUNCTION_INFO_V1() [1/35]

PG_FUNCTION_INFO_V1 ( test_bitmap_hash  )

◆ PG_FUNCTION_INFO_V1() [2/35]

PG_FUNCTION_INFO_V1 ( test_bitmap_match  )

◆ PG_FUNCTION_INFO_V1() [3/35]

PG_FUNCTION_INFO_V1 ( test_bms_add_member  )

◆ PG_FUNCTION_INFO_V1() [4/35]

PG_FUNCTION_INFO_V1 ( test_bms_add_members  )

◆ PG_FUNCTION_INFO_V1() [5/35]

PG_FUNCTION_INFO_V1 ( test_bms_add_range  )

◆ PG_FUNCTION_INFO_V1() [6/35]

PG_FUNCTION_INFO_V1 ( test_bms_compare  )

◆ PG_FUNCTION_INFO_V1() [7/35]

PG_FUNCTION_INFO_V1 ( test_bms_copy  )

◆ PG_FUNCTION_INFO_V1() [8/35]

PG_FUNCTION_INFO_V1 ( test_bms_del_member  )

◆ PG_FUNCTION_INFO_V1() [9/35]

PG_FUNCTION_INFO_V1 ( test_bms_del_members  )

◆ PG_FUNCTION_INFO_V1() [10/35]

PG_FUNCTION_INFO_V1 ( test_bms_difference  )

◆ PG_FUNCTION_INFO_V1() [11/35]

PG_FUNCTION_INFO_V1 ( test_bms_equal  )

◆ PG_FUNCTION_INFO_V1() [12/35]

PG_FUNCTION_INFO_V1 ( test_bms_get_singleton_member  )

◆ PG_FUNCTION_INFO_V1() [13/35]

PG_FUNCTION_INFO_V1 ( test_bms_hash_value  )

◆ PG_FUNCTION_INFO_V1() [14/35]

PG_FUNCTION_INFO_V1 ( test_bms_int_members  )

◆ PG_FUNCTION_INFO_V1() [15/35]

PG_FUNCTION_INFO_V1 ( test_bms_intersect  )

◆ PG_FUNCTION_INFO_V1() [16/35]

PG_FUNCTION_INFO_V1 ( test_bms_is_empty  )

◆ PG_FUNCTION_INFO_V1() [17/35]

PG_FUNCTION_INFO_V1 ( test_bms_is_member  )

◆ PG_FUNCTION_INFO_V1() [18/35]

PG_FUNCTION_INFO_V1 ( test_bms_is_subset  )

◆ PG_FUNCTION_INFO_V1() [19/35]

PG_FUNCTION_INFO_V1 ( test_bms_join  )

◆ PG_FUNCTION_INFO_V1() [20/35]

PG_FUNCTION_INFO_V1 ( test_bms_make_singleton  )

◆ PG_FUNCTION_INFO_V1() [21/35]

PG_FUNCTION_INFO_V1 ( test_bms_member_index  )

◆ PG_FUNCTION_INFO_V1() [22/35]

PG_FUNCTION_INFO_V1 ( test_bms_membership  )

◆ PG_FUNCTION_INFO_V1() [23/35]

PG_FUNCTION_INFO_V1 ( test_bms_next_member  )

◆ PG_FUNCTION_INFO_V1() [24/35]

PG_FUNCTION_INFO_V1 ( test_bms_nonempty_difference  )

◆ PG_FUNCTION_INFO_V1() [25/35]

PG_FUNCTION_INFO_V1 ( test_bms_num_members  )

◆ PG_FUNCTION_INFO_V1() [26/35]

PG_FUNCTION_INFO_V1 ( test_bms_offset_members  )

◆ PG_FUNCTION_INFO_V1() [27/35]

PG_FUNCTION_INFO_V1 ( test_bms_overlap  )

◆ PG_FUNCTION_INFO_V1() [28/35]

PG_FUNCTION_INFO_V1 ( test_bms_overlap_list  )

◆ PG_FUNCTION_INFO_V1() [29/35]

PG_FUNCTION_INFO_V1 ( test_bms_prev_member  )

◆ PG_FUNCTION_INFO_V1() [30/35]

PG_FUNCTION_INFO_V1 ( test_bms_replace_members  )

◆ PG_FUNCTION_INFO_V1() [31/35]

PG_FUNCTION_INFO_V1 ( test_bms_singleton_member  )

◆ PG_FUNCTION_INFO_V1() [32/35]

PG_FUNCTION_INFO_V1 ( test_bms_subset_compare  )

◆ PG_FUNCTION_INFO_V1() [33/35]

PG_FUNCTION_INFO_V1 ( test_bms_union  )

◆ PG_FUNCTION_INFO_V1() [34/35]

PG_FUNCTION_INFO_V1 ( test_random_offset_operations  )

◆ PG_FUNCTION_INFO_V1() [35/35]

PG_FUNCTION_INFO_V1 ( test_random_operations  )

◆ test_bitmap_hash()

Datum test_bitmap_hash ( PG_FUNCTION_ARGS  )

Definition at line 572 of file test_bitmapset.c.

573{
576
577 /* Call bitmap_hash */
578 hash_result = bitmap_hash(&bms, sizeof(Bitmapset *));
579
581}
uint32 bitmap_hash(const void *key, Size keysize)
Definition bitmapset.c:1559
uint32_t uint32
Definition c.h:683
#define PG_RETURN_INT32(x)
Definition fmgr.h:355
#define PG_ARG_GETBITMAPSET(n)

References bitmap_hash(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_INT32.

◆ test_bitmap_match()

Datum test_bitmap_match ( PG_FUNCTION_ARGS  )

Definition at line 584 of file test_bitmapset.c.

585{
588 int match_result;
589
590 /* Call bitmap_match with addresses of the Bitmapset pointers */
592
594}
int bitmap_match(const void *key1, const void *key2, Size keysize)
Definition bitmapset.c:1569

References bitmap_match(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_INT32.

◆ test_bms_add_member()

Datum test_bms_add_member ( PG_FUNCTION_ARGS  )

Definition at line 127 of file test_bitmapset.c.

128{
129 Bitmapset *bms;
130 int member;
131
132 if (PG_ARGISNULL(1))
133 PG_RETURN_NULL(); /* invalid input */
134
136 member = PG_GETARG_INT32(1);
137
138 bms = bms_add_member(bms, member);
139
141}
Bitmapset * bms_add_member(Bitmapset *a, int x)
Definition bitmapset.c:934
#define PG_ARGISNULL(n)
Definition fmgr.h:209
#define PG_RETURN_NULL()
Definition fmgr.h:346
#define PG_GETARG_INT32(n)
Definition fmgr.h:269
#define PG_RETURN_BITMAPSET_AS_TEXT(bms)

References bms_add_member(), fb(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_INT32, PG_RETURN_BITMAPSET_AS_TEXT, and PG_RETURN_NULL.

◆ test_bms_add_members()

Datum test_bms_add_members ( PG_FUNCTION_ARGS  )

Definition at line 144 of file test_bitmapset.c.

145{
148
149 /* left input is recycled */
151
153}
Bitmapset * bms_add_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:1036

References bms_add_members(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_add_range()

Datum test_bms_add_range ( PG_FUNCTION_ARGS  )

Definition at line 493 of file test_bitmapset.c.

494{
495 Bitmapset *bms;
496 int32 lower,
497 upper;
498
499 if (PG_ARGISNULL(1) || PG_ARGISNULL(2))
500 PG_RETURN_NULL(); /* invalid input */
501
505
507
509}
Bitmapset * bms_add_range(Bitmapset *a, int lower, int upper)
Definition bitmapset.c:1138
int32_t int32
Definition c.h:679
Datum lower(PG_FUNCTION_ARGS)
Datum upper(PG_FUNCTION_ARGS)

References bms_add_range(), fb(), lower(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_INT32, PG_RETURN_BITMAPSET_AS_TEXT, PG_RETURN_NULL, and upper().

◆ test_bms_compare()

Datum test_bms_compare ( PG_FUNCTION_ARGS  )

Definition at line 313 of file test_bitmapset.c.

314{
317 int result;
318
320
322}
int bms_compare(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:184
uint32 result

References bms_compare(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_INT32, and result.

◆ test_bms_copy()

Datum test_bms_copy ( PG_FUNCTION_ARGS  )

Definition at line 214 of file test_bitmapset.c.

215{
218
220
222}
Bitmapset * bms_copy(const Bitmapset *a)
Definition bitmapset.c:123

References bms_copy(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_del_member()

Datum test_bms_del_member ( PG_FUNCTION_ARGS  )

Definition at line 156 of file test_bitmapset.c.

157{
158 Bitmapset *bms;
159 int32 member;
160
161 if (PG_ARGISNULL(1))
162 PG_RETURN_NULL(); /* invalid input */
163
165 member = PG_GETARG_INT32(1);
166
167 bms = bms_del_member(bms, member);
168
170}
Bitmapset * bms_del_member(Bitmapset *a, int x)
Definition bitmapset.c:987

References bms_del_member(), fb(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_INT32, PG_RETURN_BITMAPSET_AS_TEXT, and PG_RETURN_NULL.

◆ test_bms_del_members()

Datum test_bms_del_members ( PG_FUNCTION_ARGS  )

Definition at line 524 of file test_bitmapset.c.

525{
528
529 /* left input gets recycled */
531
533}
Bitmapset * bms_del_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:1280

References bms_del_members(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_difference()

Datum test_bms_difference ( PG_FUNCTION_ARGS  )

Definition at line 290 of file test_bitmapset.c.

291{
295
297
299}
Bitmapset * bms_difference(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:347

References bms_difference(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_equal()

Datum test_bms_equal ( PG_FUNCTION_ARGS  )

Definition at line 225 of file test_bitmapset.c.

226{
229 bool result;
230
232
234}
bool bms_equal(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:143
#define PG_RETURN_BOOL(x)
Definition fmgr.h:360

References bms_equal(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_BOOL, and result.

◆ test_bms_get_singleton_member()

Datum test_bms_get_singleton_member ( PG_FUNCTION_ARGS  )

Definition at line 371 of file test_bitmapset.c.

372{
374 int member;
375
376 /*
377 * Keep this simple. Return -1 when we detect the set is not a singleton
378 * set, otherwise return the singleton member.
379 */
380 if (!bms_get_singleton_member(bms, &member))
381 member = -1;
382
383 PG_RETURN_INT32(member);
384}
bool bms_get_singleton_member(const Bitmapset *a, int *member)
Definition bitmapset.c:843

References bms_get_singleton_member(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_INT32.

◆ test_bms_hash_value()

Datum test_bms_hash_value ( PG_FUNCTION_ARGS  )

Definition at line 561 of file test_bitmapset.c.

562{
565
567
569}
uint32 bms_hash_value(const Bitmapset *a)
Definition bitmapset.c:1543

References bms_hash_value(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_INT32.

◆ test_bms_int_members()

Datum test_bms_int_members ( PG_FUNCTION_ARGS  )

Definition at line 512 of file test_bitmapset.c.

513{
516
517 /* left input gets recycled */
519
521}
Bitmapset * bms_int_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:1228

References bms_int_members(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_intersect()

Datum test_bms_intersect ( PG_FUNCTION_ARGS  )

Definition at line 278 of file test_bitmapset.c.

279{
283
285
287}
Bitmapset * bms_intersect(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:293

References bms_intersect(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_is_empty()

Datum test_bms_is_empty ( PG_FUNCTION_ARGS  )

Definition at line 325 of file test_bitmapset.c.

326{
328 bool result;
329
331
333}
#define bms_is_empty(a)
Definition bitmapset.h:119

References bms_is_empty, fb(), PG_ARG_GETBITMAPSET, PG_RETURN_BOOL, and result.

◆ test_bms_is_member()

Datum test_bms_is_member ( PG_FUNCTION_ARGS  )

Definition at line 173 of file test_bitmapset.c.

174{
175 Bitmapset *bms;
176 int32 member;
177 bool result;
178
179 if (PG_ARGISNULL(1))
180 PG_RETURN_NULL(); /* invalid input */
181
183 member = PG_GETARG_INT32(1);
184
185 result = bms_is_member(member, bms);
186
188}
bool bms_is_member(int x, const Bitmapset *a)
Definition bitmapset.c:645

References bms_is_member(), fb(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_INT32, PG_RETURN_BOOL, PG_RETURN_NULL, and result.

◆ test_bms_is_subset()

Datum test_bms_is_subset ( PG_FUNCTION_ARGS  )

Definition at line 336 of file test_bitmapset.c.

337{
340 bool result;
341
343
345}
bool bms_is_subset(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:547

References bms_is_subset(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_BOOL, and result.

◆ test_bms_join()

Datum test_bms_join ( PG_FUNCTION_ARGS  )

Definition at line 548 of file test_bitmapset.c.

549{
553
554 /* either input can be recycled */
556
558}
Bitmapset * bms_join(Bitmapset *a, Bitmapset *b)
Definition bitmapset.c:1349

References bms_join(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_make_singleton()

Datum test_bms_make_singleton ( PG_FUNCTION_ARGS  )

Definition at line 202 of file test_bitmapset.c.

203{
204 Bitmapset *bms;
205 int32 member;
206
207 member = PG_GETARG_INT32(0);
208 bms = bms_make_singleton(member);
209
211}
Bitmapset * bms_make_singleton(int x)
Definition bitmapset.c:217

References bms_make_singleton(), fb(), PG_GETARG_INT32, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_member_index()

Datum test_bms_member_index ( PG_FUNCTION_ARGS  )

Definition at line 475 of file test_bitmapset.c.

476{
477 Bitmapset *bms;
478 int32 member;
479 int result;
480
481 if (PG_ARGISNULL(1))
482 PG_RETURN_NULL(); /* invalid input */
483
485 member = PG_GETARG_INT32(1);
486
487 result = bms_member_index(bms, member);
488
490}
int bms_member_index(Bitmapset *a, int x)
Definition bitmapset.c:674

References bms_member_index(), fb(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_INT32, PG_RETURN_INT32, PG_RETURN_NULL, and result.

◆ test_bms_membership()

Datum test_bms_membership ( PG_FUNCTION_ARGS  )

Definition at line 249 of file test_bitmapset.c.

250{
253
255
257}
BMS_Membership bms_membership(const Bitmapset *a)
Definition bitmapset.c:900
BMS_Membership
Definition bitmapset.h:70

References bms_membership(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_INT32, and result.

◆ test_bms_next_member()

Datum test_bms_next_member ( PG_FUNCTION_ARGS  )

Definition at line 260 of file test_bitmapset.c.

261{
262 Bitmapset *bms;
264 int result;
265
266 if (PG_ARGISNULL(1))
267 PG_RETURN_NULL(); /* invalid input */
268
271
273
275}
int bms_next_member(const Bitmapset *a, int prevbit)
Definition bitmapset.c:1425

References bms_next_member(), fb(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_INT32, PG_RETURN_INT32, PG_RETURN_NULL, and result.

◆ test_bms_nonempty_difference()

Datum test_bms_nonempty_difference ( PG_FUNCTION_ARGS  )

Definition at line 463 of file test_bitmapset.c.

464{
467 bool result;
468
470
472}
bool bms_nonempty_difference(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:769

References bms_nonempty_difference(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_BOOL, and result.

◆ test_bms_num_members()

Datum test_bms_num_members ( PG_FUNCTION_ARGS  )

Definition at line 191 of file test_bitmapset.c.

192{
194 int result;
195
197
199}
int bms_num_members(const Bitmapset *a)
Definition bitmapset.c:879

References bms_num_members(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_INT32, and result.

◆ test_bms_offset_members()

Datum test_bms_offset_members ( PG_FUNCTION_ARGS  )

Definition at line 302 of file test_bitmapset.c.

303{
305 int offset = PG_GETARG_INT32(1);
306
307 bms = bms_offset_members(bms, offset);
308
310}
Bitmapset * bms_offset_members(const Bitmapset *a, int offset)
Definition bitmapset.c:419

References bms_offset_members(), fb(), PG_ARG_GETBITMAPSET, PG_GETARG_INT32, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_overlap()

Datum test_bms_overlap ( PG_FUNCTION_ARGS  )

Definition at line 405 of file test_bitmapset.c.

406{
409 bool result;
410
412
414}
bool bms_overlap(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:710

References bms_overlap(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_BOOL, and result.

◆ test_bms_overlap_list()

Datum test_bms_overlap_list ( PG_FUNCTION_ARGS  )

Definition at line 417 of file test_bitmapset.c.

418{
419 Bitmapset *bms;
420 ArrayType *array;
421 List *int_list = NIL;
422 bool result;
424 bool *elem_nulls = NULL;
425 int elem_count;
426 int i;
427
429
430 if (!PG_ARGISNULL(1))
431 {
432 array = PG_GETARG_ARRAYTYPE_P(1);
433
434 deconstruct_array(array,
435 INT4OID, sizeof(int32), true, 'i',
436 &elem_datums, &elem_nulls, &elem_count);
437
438 for (i = 0; i < elem_count; i++)
439 {
440 if (!elem_nulls[i])
441 {
442 int32 member = DatumGetInt32(elem_datums[i]);
443
444 int_list = lappend_int(int_list, member);
445 }
446 }
447 }
448
450
452
453 if (elem_datums)
455
456 if (elem_nulls)
457 pfree(elem_nulls);
458
460}
#define PG_GETARG_ARRAYTYPE_P(n)
Definition array.h:263
void deconstruct_array(const ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)
bool bms_overlap_list(const Bitmapset *a, const List *b)
Definition bitmapset.c:736
int i
Definition isn.c:77
List * lappend_int(List *list, int datum)
Definition list.c:357
void list_free(List *list)
Definition list.c:1546
void pfree(void *pointer)
Definition mcxt.c:1619
#define NIL
Definition pg_list.h:68
uint64_t Datum
Definition postgres.h:70
static int32 DatumGetInt32(Datum X)
Definition postgres.h:202
Definition pg_list.h:54

References bms_overlap_list(), DatumGetInt32(), deconstruct_array(), fb(), i, lappend_int(), list_free(), NIL, pfree(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_ARRAYTYPE_P, PG_RETURN_BOOL, and result.

◆ test_bms_prev_member()

Datum test_bms_prev_member ( PG_FUNCTION_ARGS  )

Definition at line 387 of file test_bitmapset.c.

388{
389 Bitmapset *bms;
391 int result;
392
393 if (PG_ARGISNULL(1))
394 PG_RETURN_NULL(); /* invalid input */
395
398
400
402}
int bms_prev_member(const Bitmapset *a, int prevbit)
Definition bitmapset.c:1487

References bms_prev_member(), fb(), PG_ARG_GETBITMAPSET, PG_ARGISNULL, PG_GETARG_INT32, PG_RETURN_INT32, PG_RETURN_NULL, and result.

◆ test_bms_replace_members()

Datum test_bms_replace_members ( PG_FUNCTION_ARGS  )

Definition at line 536 of file test_bitmapset.c.

537{
540
541 /* left input gets recycled */
543
545}
Bitmapset * bms_replace_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:1091

References bms_replace_members(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_bms_singleton_member()

Datum test_bms_singleton_member ( PG_FUNCTION_ARGS  )

Definition at line 360 of file test_bitmapset.c.

361{
363 int result;
364
366
368}
int bms_singleton_member(const Bitmapset *a)
Definition bitmapset.c:800

References bms_singleton_member(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_INT32, and result.

◆ test_bms_subset_compare()

Datum test_bms_subset_compare ( PG_FUNCTION_ARGS  )

Definition at line 348 of file test_bitmapset.c.

349{
353
355
357}
BMS_Comparison bms_subset_compare(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:580
BMS_Comparison
Definition bitmapset.h:61

References bms_subset_compare(), fb(), PG_ARG_GETBITMAPSET, PG_RETURN_INT32, and result.

◆ test_bms_union()

Datum test_bms_union ( PG_FUNCTION_ARGS  )

Definition at line 237 of file test_bitmapset.c.

238{
242
244
246}
Bitmapset * bms_union(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:252

References bms_union(), fb(), PG_ARG_GETBITMAPSET, and PG_RETURN_BITMAPSET_AS_TEXT.

◆ test_random_offset_operations()

Datum test_random_offset_operations ( PG_FUNCTION_ARGS  )

Definition at line 797 of file test_bitmapset.c.

798{
800 int64 seed;
801 int num_ops;
802 int max_range;
803 int min_value;
804 int member;
805
806 if (PG_ARGISNULL(0))
807 seed = GetCurrentTimestamp();
808 else
809 seed = PG_GETARG_INT64(0);
810
814
815 if (PG_ARGISNULL(1) || num_ops <= 0)
816 elog(ERROR, "invalid number of operations");
817 if (PG_ARGISNULL(2) || max_range <= 0)
818 elog(ERROR, "invalid maximum range");
819 if (PG_ARGISNULL(3) || min_value < 0)
820 elog(ERROR, "invalid minimum value");
821
822 pg_prng_seed(&state, (uint64) seed);
823
824 for (int op = 0; op < num_ops; op++)
825 {
829 int offset;
830 int nmembers;
831
833
834 /* Figure out a random offset and how many members to add */
836 nmembers = pg_prng_uint32(&state) % max_range + min_value;
837
838 for (int i = 0; i < nmembers; i++)
839 {
842 }
843
844 /* create a known-good set the old fashioned way */
846 member = -1;
847 while ((member = bms_next_member(random_bms, member)) >= 0)
848 {
849 if (member + offset >= 0)
850 offset_bms2 = bms_add_member(offset_bms2, member + offset);
851 }
852
853 /* do the offsetting */
855
856 /* check against the known-good set */
858 elog(ERROR, "bms_offset_members failed with offset %d seed " INT64_FORMAT, offset, seed);
859
860 /* Cleanup before the next loop */
864 }
865
867}
TimestampTz GetCurrentTimestamp(void)
Definition timestamp.c:1649
void bms_free(Bitmapset *a)
Definition bitmapset.c:240
#define INT64_FORMAT
Definition c.h:693
int64_t int64
Definition c.h:680
uint64_t uint64
Definition c.h:684
#define elog(elevel,...)
Definition elog.h:228
#define PG_GETARG_INT64(n)
Definition fmgr.h:284
#define CHECK_FOR_INTERRUPTS()
Definition miscadmin.h:125
uint32 pg_prng_uint32(pg_prng_state *state)
Definition pg_prng.c:227
void pg_prng_seed(pg_prng_state *state, uint64 seed)
Definition pg_prng.c:89

References bms_add_member(), bms_equal(), bms_free(), bms_next_member(), bms_offset_members(), CHECK_FOR_INTERRUPTS, elog, ERROR, fb(), GetCurrentTimestamp(), i, INT64_FORMAT, PG_ARGISNULL, PG_GETARG_INT32, PG_GETARG_INT64, pg_prng_seed(), pg_prng_uint32(), and PG_RETURN_INT32.

◆ test_random_operations()

Datum test_random_operations ( PG_FUNCTION_ARGS  )

Definition at line 609 of file test_bitmapset.c.

610{
613 Bitmapset *bms = NULL;
617 int num_ops;
618 int max_range;
619 int min_value;
620 int member;
621 int *members;
622 int num_members = 0;
623 int total_ops = 0;
624
625 if (!PG_ARGISNULL(0))
626 seed = PG_GETARG_INT64(0);
627
631
632 if (PG_ARGISNULL(1) || num_ops <= 0)
633 elog(ERROR, "invalid number of operations");
634 if (PG_ARGISNULL(2) || max_range <= 0)
635 elog(ERROR, "invalid maximum range");
636 if (PG_ARGISNULL(3) || min_value < 0)
637 elog(ERROR, "invalid minimum value");
638
639 pg_prng_seed(&state, seed);
640
641 /*
642 * There can be up to "num_ops" members added. This is very unlikely,
643 * still possible if all the operations hit the "0" case during phase 4
644 * where multiple operation types are mixed together.
645 */
646 members = palloc_array(int, num_ops);
647
648 /* Phase 1: Random insertions in first set */
649 for (int i = 0; i < num_ops / 2; i++)
650 {
652
654
655 if (!bms_is_member(member, bms1))
656 members[num_members++] = member;
657 bms1 = bms_add_member(bms1, member);
658 }
659
660 /* Phase 2: Random insertions in second set */
661 for (int i = 0; i < num_ops / 4; i++)
662 {
664
666
667 if (!bms_is_member(member, bms2))
668 members[num_members++] = member;
669 bms2 = bms_add_member(bms2, member);
670 }
671
672 /* Test union */
675
676 /* Verify union contains all members from first and second sets */
677 for (int i = 0; i < num_members; i++)
678 {
680
681 if (!bms_is_member(members[i], result))
682 elog(ERROR, "union missing member %d, seed " UINT64_FORMAT,
683 members[i], seed);
684 }
686
687 /*
688 * Test intersection, checking that all the members in the result are from
689 * both the first and second sets.
690 */
692 if (result != NULL)
693 {
694 member = -1;
695
696 while ((member = bms_next_member(result, member)) >= 0)
697 {
699
700 if (!bms_is_member(member, bms1) || !bms_is_member(member, bms2))
701 elog(ERROR, "intersection contains invalid member %d, seed " UINT64_FORMAT,
702 member, seed);
703 }
705 }
706
707 /* Phase 3: Test range operations */
708 result = NULL;
709 for (int i = 0; i < num_ops; i++)
710 {
711 int lower = pg_prng_uint32(&state) % 100;
712 int upper = lower + (pg_prng_uint32(&state) % 20);
713
715
717 }
718 if (result != NULL)
719 {
722 }
723
724 bms_free(bms1);
725 bms_free(bms2);
726
727 /*
728 * Phase 4: mix of operations on a single set, cross-checking a bitmap
729 * with a secondary state, "members".
730 */
731 num_members = 0;
732
733 for (int op = 0; op < num_ops; op++)
734 {
736
737 switch (pg_prng_uint32(&state) % 3)
738 {
739 case 0: /* add */
741 if (!bms_is_member(member, bms))
742 members[num_members++] = member;
743 bms = bms_add_member(bms, member);
744 break;
745 case 1: /* delete */
746 if (num_members > 0)
747 {
748 int pos = pg_prng_uint32(&state) % num_members;
749
750 member = members[pos];
751 if (!bms_is_member(member, bms))
752 elog(ERROR, "expected %d to be a valid member, seed " UINT64_FORMAT,
753 member, seed);
754
755 bms = bms_del_member(bms, member);
756
757 /*
758 * Move the final array member at the position of the
759 * member just deleted, reducing the array size by one.
760 */
761 members[pos] = members[--num_members];
762 }
763 break;
764 case 2: /* test membership */
765 /* Verify that bitmap contains all members */
766 for (int i = 0; i < num_members; i++)
767 {
768 if (!bms_is_member(members[i], bms))
769 elog(ERROR, "missing member %d, seed " UINT64_FORMAT,
770 members[i], seed);
771 }
772 break;
773 }
774 total_ops++;
775 }
776
777 bms_free(bms);
778 pfree(members);
779
781}
#define UINT64_FORMAT
Definition c.h:694
#define palloc_array(type, count)
Definition fe_memutils.h:91
#define EXPECT_TRUE(expr)
#define EXPECT_NOT_NULL(expr)

References bms_add_member(), bms_add_range(), bms_del_member(), bms_free(), bms_intersect(), bms_is_member(), bms_next_member(), bms_num_members(), bms_union(), CHECK_FOR_INTERRUPTS, elog, ERROR, EXPECT_NOT_NULL, EXPECT_TRUE, fb(), GetCurrentTimestamp(), i, lower(), palloc_array, pfree(), PG_ARGISNULL, PG_GETARG_INT32, PG_GETARG_INT64, pg_prng_seed(), pg_prng_uint32(), PG_RETURN_INT32, result, UINT64_FORMAT, and upper().

Variable Documentation

◆ PG_MODULE_MAGIC

PG_MODULE_MAGIC

Definition at line 31 of file test_bitmapset.c.