Tidy up datatype usage in test_random_offset_operations()

I had previously made "seed" a uint64, as that's what pg_prng_seed()
expects to get.  However, GetCurrentTimestamp() and PG_GETARG_INT64()
both return int64, so there was a mismatch in signedness.

There are no bugs being fixed here, but it seems cleaner to make the
variable int64 and cast to unsigned when passing to pg_prng_seed().  This
means we no longer have to use the INT64_FORMAT specifier on the unsigned
type to format the seed of the failing test correctly to allow a user to
use the same seed from SQL when trying to recreate any failures manually.

The most important thing to ensure is correct here is that users can
specify the full range of seed values that could be automatically
selected by GetCurrentTimestamp() so that we can recreate any failures
from runs where the seed was auto-selected.  This still works as
expected when using the int64 type.

In passing, adjust a comment that was a little misleading.

Reported-by: Peter Eisentraut <peter@eisentraut.org>
Author: David Rowley <dgrowleyml@gmail.com>
Discussion: https://postgr.es/m/08fa9f01-373e-4cb4-9650-ad20517e2de3@eisentraut.org
This commit is contained in:
David Rowley 2026-07-09 11:50:18 +12:00
parent 881033ae8b
commit b5d73d2dd7
2 changed files with 3 additions and 3 deletions

View file

@ -522,7 +522,7 @@ bms_offset_members(const Bitmapset *a, int offset)
/*
* We loop backward over the array so we correctly carry bits from
* higher words before they're overwritten.
* higher words.
*/
do
{

View file

@ -797,7 +797,7 @@ Datum
test_random_offset_operations(PG_FUNCTION_ARGS)
{
pg_prng_state state;
uint64 seed;
int64 seed;
int num_ops;
int max_range;
int min_value;
@ -819,7 +819,7 @@ test_random_offset_operations(PG_FUNCTION_ARGS)
if (PG_ARGISNULL(3) || min_value < 0)
elog(ERROR, "invalid minimum value");
pg_prng_seed(&state, seed);
pg_prng_seed(&state, (uint64) seed);
for (int op = 0; op < num_ops; op++)
{