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_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)
 
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_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)
 

Variables

 PG_MODULE_MAGIC
 

Macro Definition Documentation

◆ BITMAPSET_TO_TEXT

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

Definition at line 88 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 79 of file test_bitmapset.c.

80 { \
81 if ((expr) == NULL) \
82 elog(ERROR, \
83 "%s was unexpectedly true in file \"%s\" line %u", \
84 #expr, __FILE__, __LINE__); \
85 } 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 71 of file test_bitmapset.c.

72 { \
73 if (!(expr)) \
74 elog(ERROR, \
75 "%s was unexpectedly false in file \"%s\" line %u", \
76 #expr, __FILE__, __LINE__); \
77 } 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 95 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 102 of file test_bitmapset.c.

◆ TEXT_TO_BITMAPSET

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

Definition at line 89 of file test_bitmapset.c.

Function Documentation

◆ PG_FUNCTION_INFO_V1() [1/33]

PG_FUNCTION_INFO_V1 ( test_bitmap_hash  )

◆ PG_FUNCTION_INFO_V1() [2/33]

PG_FUNCTION_INFO_V1 ( test_bitmap_match  )

◆ PG_FUNCTION_INFO_V1() [3/33]

PG_FUNCTION_INFO_V1 ( test_bms_add_member  )

◆ PG_FUNCTION_INFO_V1() [4/33]

PG_FUNCTION_INFO_V1 ( test_bms_add_members  )

◆ PG_FUNCTION_INFO_V1() [5/33]

PG_FUNCTION_INFO_V1 ( test_bms_add_range  )

◆ PG_FUNCTION_INFO_V1() [6/33]

PG_FUNCTION_INFO_V1 ( test_bms_compare  )

◆ PG_FUNCTION_INFO_V1() [7/33]

PG_FUNCTION_INFO_V1 ( test_bms_copy  )

◆ PG_FUNCTION_INFO_V1() [8/33]

PG_FUNCTION_INFO_V1 ( test_bms_del_member  )

◆ PG_FUNCTION_INFO_V1() [9/33]

PG_FUNCTION_INFO_V1 ( test_bms_del_members  )

◆ PG_FUNCTION_INFO_V1() [10/33]

PG_FUNCTION_INFO_V1 ( test_bms_difference  )

◆ PG_FUNCTION_INFO_V1() [11/33]

PG_FUNCTION_INFO_V1 ( test_bms_equal  )

◆ PG_FUNCTION_INFO_V1() [12/33]

PG_FUNCTION_INFO_V1 ( test_bms_get_singleton_member  )

◆ PG_FUNCTION_INFO_V1() [13/33]

PG_FUNCTION_INFO_V1 ( test_bms_hash_value  )

◆ PG_FUNCTION_INFO_V1() [14/33]

PG_FUNCTION_INFO_V1 ( test_bms_int_members  )

◆ PG_FUNCTION_INFO_V1() [15/33]

PG_FUNCTION_INFO_V1 ( test_bms_intersect  )

◆ PG_FUNCTION_INFO_V1() [16/33]

PG_FUNCTION_INFO_V1 ( test_bms_is_empty  )

◆ PG_FUNCTION_INFO_V1() [17/33]

PG_FUNCTION_INFO_V1 ( test_bms_is_member  )

◆ PG_FUNCTION_INFO_V1() [18/33]

PG_FUNCTION_INFO_V1 ( test_bms_is_subset  )

◆ PG_FUNCTION_INFO_V1() [19/33]

PG_FUNCTION_INFO_V1 ( test_bms_join  )

◆ PG_FUNCTION_INFO_V1() [20/33]

PG_FUNCTION_INFO_V1 ( test_bms_make_singleton  )

◆ PG_FUNCTION_INFO_V1() [21/33]

PG_FUNCTION_INFO_V1 ( test_bms_member_index  )

◆ PG_FUNCTION_INFO_V1() [22/33]

PG_FUNCTION_INFO_V1 ( test_bms_membership  )

◆ PG_FUNCTION_INFO_V1() [23/33]

PG_FUNCTION_INFO_V1 ( test_bms_next_member  )

◆ PG_FUNCTION_INFO_V1() [24/33]

PG_FUNCTION_INFO_V1 ( test_bms_nonempty_difference  )

◆ PG_FUNCTION_INFO_V1() [25/33]

PG_FUNCTION_INFO_V1 ( test_bms_num_members  )

◆ PG_FUNCTION_INFO_V1() [26/33]

PG_FUNCTION_INFO_V1 ( test_bms_overlap  )

◆ PG_FUNCTION_INFO_V1() [27/33]

PG_FUNCTION_INFO_V1 ( test_bms_overlap_list  )

◆ PG_FUNCTION_INFO_V1() [28/33]

PG_FUNCTION_INFO_V1 ( test_bms_prev_member  )

◆ PG_FUNCTION_INFO_V1() [29/33]

PG_FUNCTION_INFO_V1 ( test_bms_replace_members  )

◆ PG_FUNCTION_INFO_V1() [30/33]

PG_FUNCTION_INFO_V1 ( test_bms_singleton_member  )

◆ PG_FUNCTION_INFO_V1() [31/33]

PG_FUNCTION_INFO_V1 ( test_bms_subset_compare  )

◆ PG_FUNCTION_INFO_V1() [32/33]

PG_FUNCTION_INFO_V1 ( test_bms_union  )

◆ PG_FUNCTION_INFO_V1() [33/33]

PG_FUNCTION_INFO_V1 ( test_random_operations  )

◆ test_bitmap_hash()

Datum test_bitmap_hash ( PG_FUNCTION_ARGS  )

Definition at line 559 of file test_bitmapset.c.

560{
563
564 /* Call bitmap_hash */
565 hash_result = bitmap_hash(&bms, sizeof(Bitmapset *));
566
568}
uint32 bitmap_hash(const void *key, Size keysize)
Definition bitmapset.c:1424
uint32_t uint32
Definition c.h:624
#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 571 of file test_bitmapset.c.

572{
575 int match_result;
576
577 /* Call bitmap_match with addresses of the Bitmapset pointers */
579
581}
int bitmap_match(const void *key1, const void *key2, Size keysize)
Definition bitmapset.c:1434

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 125 of file test_bitmapset.c.

126{
127 Bitmapset *bms;
128 int member;
129
130 if (PG_ARGISNULL(1))
131 PG_RETURN_NULL(); /* invalid input */
132
134 member = PG_GETARG_INT32(1);
135
136 bms = bms_add_member(bms, member);
137
139}
Bitmapset * bms_add_member(Bitmapset *a, int x)
Definition bitmapset.c:799
#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 142 of file test_bitmapset.c.

143{
146
147 /* left input is recycled */
149
151}
Bitmapset * bms_add_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:901

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 480 of file test_bitmapset.c.

481{
482 Bitmapset *bms;
483 int32 lower,
484 upper;
485
486 if (PG_ARGISNULL(1) || PG_ARGISNULL(2))
487 PG_RETURN_NULL(); /* invalid input */
488
492
494
496}
Bitmapset * bms_add_range(Bitmapset *a, int lower, int upper)
Definition bitmapset.c:1003
int32_t int32
Definition c.h:620
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 300 of file test_bitmapset.c.

301{
304 int result;
305
307
309}
int bms_compare(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:183
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 212 of file test_bitmapset.c.

213{
216
218
220}
Bitmapset * bms_copy(const Bitmapset *a)
Definition bitmapset.c:122

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 154 of file test_bitmapset.c.

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

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 511 of file test_bitmapset.c.

512{
515
516 /* left input gets recycled */
518
520}
Bitmapset * bms_del_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:1145

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 288 of file test_bitmapset.c.

289{
293
295
297}
Bitmapset * bms_difference(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:346

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 223 of file test_bitmapset.c.

224{
227 bool result;
228
230
232}
bool bms_equal(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:142
#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 358 of file test_bitmapset.c.

359{
361 int member;
362
363 /*
364 * Keep this simple. Return -1 when we detect the set is not a singleton
365 * set, otherwise return the singleton member.
366 */
367 if (!bms_get_singleton_member(bms, &member))
368 member = -1;
369
370 PG_RETURN_INT32(member);
371}
bool bms_get_singleton_member(const Bitmapset *a, int *member)
Definition bitmapset.c:708

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 548 of file test_bitmapset.c.

549{
552
554
556}
uint32 bms_hash_value(const Bitmapset *a)
Definition bitmapset.c:1408

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 499 of file test_bitmapset.c.

500{
503
504 /* left input gets recycled */
506
508}
Bitmapset * bms_int_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:1093

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 276 of file test_bitmapset.c.

277{
281
283
285}
Bitmapset * bms_intersect(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:292

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 312 of file test_bitmapset.c.

313{
315 bool result;
316
318
320}
#define bms_is_empty(a)
Definition bitmapset.h:118

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 171 of file test_bitmapset.c.

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

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 323 of file test_bitmapset.c.

324{
327 bool result;
328
330
332}
bool bms_is_subset(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:412

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 535 of file test_bitmapset.c.

536{
540
541 /* either input can be recycled */
543
545}
Bitmapset * bms_join(Bitmapset *a, Bitmapset *b)
Definition bitmapset.c:1214

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 200 of file test_bitmapset.c.

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

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 462 of file test_bitmapset.c.

463{
464 Bitmapset *bms;
465 int32 member;
466 int result;
467
468 if (PG_ARGISNULL(1))
469 PG_RETURN_NULL(); /* invalid input */
470
472 member = PG_GETARG_INT32(1);
473
474 result = bms_member_index(bms, member);
475
477}
int bms_member_index(Bitmapset *a, int x)
Definition bitmapset.c:539

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 247 of file test_bitmapset.c.

248{
251
253
255}
BMS_Membership bms_membership(const Bitmapset *a)
Definition bitmapset.c:765
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 258 of file test_bitmapset.c.

259{
260 Bitmapset *bms;
262 int result;
263
264 if (PG_ARGISNULL(1))
265 PG_RETURN_NULL(); /* invalid input */
266
269
271
273}
int bms_next_member(const Bitmapset *a, int prevbit)
Definition bitmapset.c:1290

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 450 of file test_bitmapset.c.

451{
454 bool result;
455
457
459}
bool bms_nonempty_difference(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:634

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 189 of file test_bitmapset.c.

190{
192 int result;
193
195
197}
int bms_num_members(const Bitmapset *a)
Definition bitmapset.c:744

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

◆ test_bms_overlap()

Datum test_bms_overlap ( PG_FUNCTION_ARGS  )

Definition at line 392 of file test_bitmapset.c.

393{
396 bool result;
397
399
401}
bool bms_overlap(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:575

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 404 of file test_bitmapset.c.

405{
406 Bitmapset *bms;
407 ArrayType *array;
408 List *int_list = NIL;
409 bool result;
411 bool *elem_nulls = NULL;
412 int elem_count;
413 int i;
414
416
417 if (!PG_ARGISNULL(1))
418 {
419 array = PG_GETARG_ARRAYTYPE_P(1);
420
421 deconstruct_array(array,
422 INT4OID, sizeof(int32), true, 'i',
423 &elem_datums, &elem_nulls, &elem_count);
424
425 for (i = 0; i < elem_count; i++)
426 {
427 if (!elem_nulls[i])
428 {
429 int32 member = DatumGetInt32(elem_datums[i]);
430
431 int_list = lappend_int(int_list, member);
432 }
433 }
434 }
435
437
439
440 if (elem_datums)
442
443 if (elem_nulls)
444 pfree(elem_nulls);
445
447}
#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:601
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:1616
#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 374 of file test_bitmapset.c.

375{
376 Bitmapset *bms;
378 int result;
379
380 if (PG_ARGISNULL(1))
381 PG_RETURN_NULL(); /* invalid input */
382
385
387
389}
int bms_prev_member(const Bitmapset *a, int prevbit)
Definition bitmapset.c:1352

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 523 of file test_bitmapset.c.

524{
527
528 /* left input gets recycled */
530
532}
Bitmapset * bms_replace_members(Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:956

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 347 of file test_bitmapset.c.

348{
350 int result;
351
353
355}
int bms_singleton_member(const Bitmapset *a)
Definition bitmapset.c:665

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 335 of file test_bitmapset.c.

336{
340
342
344}
BMS_Comparison bms_subset_compare(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:445
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 235 of file test_bitmapset.c.

236{
240
242
244}
Bitmapset * bms_union(const Bitmapset *a, const Bitmapset *b)
Definition bitmapset.c:251

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

◆ test_random_operations()

Datum test_random_operations ( PG_FUNCTION_ARGS  )

Definition at line 596 of file test_bitmapset.c.

597{
600 Bitmapset *bms = NULL;
604 int num_ops;
605 int max_range;
606 int min_value;
607 int member;
608 int *members;
609 int num_members = 0;
610 int total_ops = 0;
611
612 if (!PG_ARGISNULL(0))
613 seed = PG_GETARG_INT64(0);
614
618
619 if (PG_ARGISNULL(1) || num_ops <= 0)
620 elog(ERROR, "invalid number of operations");
621 if (PG_ARGISNULL(2) || max_range <= 0)
622 elog(ERROR, "invalid maximum range");
623 if (PG_ARGISNULL(3) || min_value < 0)
624 elog(ERROR, "invalid minimum value");
625
626 pg_prng_seed(&state, seed);
627
628 /*
629 * There can be up to "num_ops" members added. This is very unlikely,
630 * still possible if all the operations hit the "0" case during phase 4
631 * where multiple operation types are mixed together.
632 */
633 members = palloc_array(int, num_ops);
634
635 /* Phase 1: Random insertions in first set */
636 for (int i = 0; i < num_ops / 2; i++)
637 {
639
641
642 if (!bms_is_member(member, bms1))
643 members[num_members++] = member;
644 bms1 = bms_add_member(bms1, member);
645 }
646
647 /* Phase 2: Random insertions in second set */
648 for (int i = 0; i < num_ops / 4; i++)
649 {
651
653
654 if (!bms_is_member(member, bms2))
655 members[num_members++] = member;
656 bms2 = bms_add_member(bms2, member);
657 }
658
659 /* Test union */
662
663 /* Verify union contains all members from first and second sets */
664 for (int i = 0; i < num_members; i++)
665 {
667
668 if (!bms_is_member(members[i], result))
669 elog(ERROR, "union missing member %d, seed " INT64_FORMAT,
670 members[i], seed);
671 }
673
674 /*
675 * Test intersection, checking that all the members in the result are from
676 * both the first and second sets.
677 */
679 if (result != NULL)
680 {
681 member = -1;
682
683 while ((member = bms_next_member(result, member)) >= 0)
684 {
686
687 if (!bms_is_member(member, bms1) || !bms_is_member(member, bms2))
688 elog(ERROR, "intersection contains invalid member %d, seed " INT64_FORMAT,
689 member, seed);
690 }
692 }
693
694 /* Phase 3: Test range operations */
695 result = NULL;
696 for (int i = 0; i < num_ops; i++)
697 {
698 int lower = pg_prng_uint32(&state) % 100;
699 int upper = lower + (pg_prng_uint32(&state) % 20);
700
702
704 }
705 if (result != NULL)
706 {
709 }
710
711 bms_free(bms1);
712 bms_free(bms2);
713
714 /*
715 * Phase 4: mix of operations on a single set, cross-checking a bitmap
716 * with a secondary state, "members".
717 */
718 num_members = 0;
719
720 for (int op = 0; op < num_ops; op++)
721 {
723
724 switch (pg_prng_uint32(&state) % 3)
725 {
726 case 0: /* add */
728 if (!bms_is_member(member, bms))
729 members[num_members++] = member;
730 bms = bms_add_member(bms, member);
731 break;
732 case 1: /* delete */
733 if (num_members > 0)
734 {
735 int pos = pg_prng_uint32(&state) % num_members;
736
737 member = members[pos];
738 if (!bms_is_member(member, bms))
739 elog(ERROR, "expected %d to be a valid member, seed " INT64_FORMAT,
740 member, seed);
741
742 bms = bms_del_member(bms, member);
743
744 /*
745 * Move the final array member at the position of the
746 * member just deleted, reducing the array size by one.
747 */
748 members[pos] = members[--num_members];
749 }
750 break;
751 case 2: /* test membership */
752 /* Verify that bitmap contains all members */
753 for (int i = 0; i < num_members; i++)
754 {
755 if (!bms_is_member(members[i], bms))
756 elog(ERROR, "missing member %d, seed " INT64_FORMAT,
757 members[i], seed);
758 }
759 break;
760 }
761 total_ops++;
762 }
763
764 bms_free(bms);
765 pfree(members);
766
768}
TimestampTz GetCurrentTimestamp(void)
Definition timestamp.c:1639
void bms_free(Bitmapset *a)
Definition bitmapset.c:239
#define INT64_FORMAT
Definition c.h:634
uint64_t uint64
Definition c.h:625
#define elog(elevel,...)
Definition elog.h:228
#define palloc_array(type, count)
Definition fe_memutils.h:76
#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
#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, INT64_FORMAT, lower(), palloc_array, pfree(), PG_ARGISNULL, PG_GETARG_INT32, PG_GETARG_INT64, pg_prng_seed(), pg_prng_uint32(), PG_RETURN_INT32, result, and upper().

Variable Documentation

◆ PG_MODULE_MAGIC

PG_MODULE_MAGIC

Definition at line 31 of file test_bitmapset.c.