blob: 282824b8dde65101c8e948eabc42146450c93d55 [file] [log] [blame]
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include "cmockery.h"
#include "postgres.h"
#include "utils/memutils.h"
#include "../instrument.c"
#define SIZE_OF_IN_PROGRESS_ARRAY (10 * sizeof(DistributedTransactionId))
static void
test__GetTmid_Test(void **state)
{
assert_true(sizeof(pg_time_t) > sizeof(int32));
/*
* For very large PgStartTime values, result from timestamptz_to_time_t either overflows or equals to -1,
* and should not match the value casted to int32 from gp_gettmid_helper()
*/
TimestampTz delta = 0x4000000000000000 >> 14;
for (TimestampTz time = 0x7FFFFFFFFFFFFFFF - delta; time > 0x3fffffffffffffff; time -= delta) {
PgStartTime = time;
int32 tmid = gp_gettmid_helper();
pg_time_t res = timestamptz_to_time_t(PgStartTime);
assert_false((int64)tmid - res == 0);
}
/*
* For smaller PgStartTime values, the result from timestamptz_to_time_t casted to int32
* should match the result from gp_gettmid_helper()
*/
delta /= 4;
for (TimestampTz time = 0x3ffffffffffff - delta; time >= 0; time -= delta) {
PgStartTime = time;
int32 tmid = gp_gettmid_helper();
pg_time_t res = timestamptz_to_time_t(PgStartTime);
assert_true((int64)tmid - res == 0);
}
/* gp_gettmid_helper should return -1 for negative PgStartTime */
PgStartTime = -100;
int32 tmid = gp_gettmid_helper();
assert_true(tmid == -1);
/* gp_gettmid_helper should return -1 for very large PgStartTime value */
PgStartTime = 0x7FFFFFFFFFFFFFFF - delta;
tmid = gp_gettmid_helper();
assert_true(tmid == -1);
}
int
main(int argc, char* argv[])
{
cmockery_parse_arguments(argc, argv);
const UnitTest tests[] =
{
unit_test(test__GetTmid_Test)
};
MemoryContextInit();
return run_tests(tests);
}