fpc/packages/gmp/examples/gmp_test_impl.inc
marco da9458587d * GMP initial version.
git-svn-id: trunk@13667 -
2009-09-07 13:50:31 +00:00

7849 lines
154 KiB
PHP

{$ifopt c-}
{$error 'Must enable assertions'}
{$endif}
const
BASE10 = 10;
BASE16 = 16;
Z_FMT = '%Zd';
Q_FMT = '%Qd';
function alloc_func(alloc_size: sizeuint): pointer; cdecl;
begin
result := getmem(alloc_size);
end;
procedure free_proc(p: pointer; size: sizeuint); cdecl;
begin
assert(size = size); // hint off
freemem(p);
end;
function reallocate_func(p: pointer; old_size, new_size: sizeuint): pointer; cdecl;
begin
assert(old_size = old_size); // hint off
result := reallocmem(p, new_size);
end;
function rnd_test(var state: randstate_t): boolean;
const N = 1000000;
var r1, r2, r3: valuint;
begin
r1 := mp_urandomm_ui(state, N);
r2 := mp_urandomm_ui(state, N);
r3 := mp_urandomm_ui(state, N);
result := (r1 < N) and (r2 < N) and (r3 < N) and ((r1 <> r2) or (r1 <> r3) or (r2 <> r3));
end;
{ TTestGmpBinding }
procedure TTestGmpBinding.mp_set_memory_functions_test;
var
af0, af: alloc_func_t;
rf0, rf: reallocate_func_t;
fp0, fp: free_proc_t;
begin
mp_get_memory_functions(@af0, @rf0, @fp0);
try
mp_set_memory_functions(@alloc_func, @reallocate_func, @free_proc);
mp_get_memory_functions(@af, @rf, @fp);
assert(af = @alloc_func);
assert(rf = @reallocate_func);
assert(fp = @free_proc);
finally
mp_set_memory_functions(af0, rf0, fp0);
mp_get_memory_functions(@af, @rf, @fp);
assert(af = af0);
assert(rf = rf0);
assert(fp = fp0);
end;
end;
procedure TTestGmpBinding.mp_get_memory_functions_test;
var
af: alloc_func_t;
fp: free_proc_t;
rf: reallocate_func_t;
begin
af := nil;
fp := nil;
rf := nil;
mp_get_memory_functions(nil, nil, nil);
assert(af = nil);
assert(fp = nil);
assert(rf = nil);
mp_get_memory_functions(@af, nil, nil);
assert(af <> nil);
assert(fp = nil);
assert(rf = nil);
af := nil;
mp_get_memory_functions(nil, @rf, nil);
assert(af = nil);
assert(fp = nil);
assert(rf <> nil);
rf := nil;
mp_get_memory_functions(nil, nil, @fp);
assert(af = nil);
assert(fp <> nil);
assert(rf = nil);
end;
procedure TTestGmpBinding.mp_randinit_default_test;
var state: randstate_t;
begin
mp_randinit_default(state);
assert(rnd_test(state));
mp_randclear(state);
end;
procedure TTestGmpBinding.mp_randinit_mt_test;
var state: randstate_t;
begin
mp_randinit_mt(state);
assert(rnd_test(state));
mp_randclear(state);
end;
procedure TTestGmpBinding.mp_randinit_lc_2exp_test;
const
A_ = 3;
C = 5;
M2EXP = 8;
var
state: randstate_t;
a: mpz_t;
begin
mpz_init_set_ui(a, A_);
mp_randinit_lc_2exp(state, a, C, M2EXP);
assert(rnd_test(state));
mp_randclear(state);
mpz_clear(a);
end;
procedure TTestGmpBinding.mp_randinit_lc_2exp_size_test;
var state: randstate_t;
begin
assert(longbool(mp_randinit_lc_2exp_size(state, 0)));
assert(rnd_test(state));
mp_randclear(state);
end;
procedure TTestGmpBinding.mp_randinit_set_test;
var rop, op: randstate_t;
begin
mp_randinit_default(op);
mp_randinit_set(rop, op);
assert(rnd_test(rop));
mp_randclear(rop);
mp_randclear(op);
end;
procedure TTestGmpBinding.mp_randclear_test;
var state: randstate_t;
begin
mp_randinit_default(state);
mp_randclear(state);
end;
procedure TTestGmpBinding.mp_randseed_test;
var
state: randstate_t;
seed: mpz_t;
begin
mp_randinit_default(state);
mpz_init_set_ui(seed, 0);
mp_randseed(state, seed);
mp_randclear(state);
mpz_clear(seed);
end;
procedure TTestGmpBinding.mp_randseed_ui_test;
var state: randstate_t;
begin
mp_randinit_default(state);
mp_randseed_ui(state, 0);
mp_randclear(state);
end;
procedure TTestGmpBinding.mp_urandomb_ui_test;
const
B = 8 * (sizeof(valuint) - 1);
N = 1 shl B;
var
state: randstate_t;
r1, r2, r3: valuint;
begin
mp_randinit_default(state);
r1 := mp_urandomb_ui(state, B);
r2 := mp_urandomb_ui(state, B);
r3 := mp_urandomb_ui(state, B);
assert((r1 < N) and (r2 < N) and (r3 < N) and ((r1 <> r2) or (r1 <> r3) or (r2 <> r3)));
mp_randclear(state);
end;
procedure TTestGmpBinding.mp_urandomm_ui_test;
const N = high(valuint);
var
state: randstate_t;
r1, r2, r3: valuint;
begin
mp_randinit_default(state);
r1 := mp_urandomm_ui(state, N);
r2 := mp_urandomm_ui(state, N);
r3 := mp_urandomm_ui(state, N);
assert((r1 < N) and (r2 < N) and (r3 < N) and ((r1 <> r2) or (r1 <> r3) or (r2 <> r3)));
mp_randclear(state);
end;
procedure TTestGmpBinding.mp_asprintf_test;
const
N = 123456;
S = '123456';
var
z: mpz_t;
p: pchar;
begin
mpz_init_set_ui(z, N);
assert(mp_asprintf(p, Z_FMT, [@z]) = length(S));
assert(p = S);
freemem(p);
mpz_clear(z);
end;
procedure TTestGmpBinding.mp_asprintf_test2;
const
N = 123456;
S = '123456';
var
z: mpz_t;
p: pchar;
begin
mpz_init_set_ui(z, N);
assert(mp_asprintf(p, Z_FMT, @z) = length(S));
assert(p = S);
freemem(p);
mpz_clear(z);
end;
procedure TTestGmpBinding.mp_snprintf_test;
const
N = 123456;
S = '123456';
var
z: mpz_t;
buf: pchar;
begin
mpz_init_set_ui(z, N);
getmem(buf, length(S) + 1);
assert(mp_snprintf(buf, length(S) + 1, Z_FMT, [@z]) = length(S));
assert(buf = S);
freemem(buf);
mpz_clear(z);
end;
procedure TTestGmpBinding.mp_snprintf_test2;
const
N = 123456;
S = '123456';
var
z: mpz_t;
buf: pchar;
begin
mpz_init_set_ui(z, N);
getmem(buf, length(S) + 1);
assert(mp_snprintf(buf, length(S) + 1, Z_FMT, @z) = length(S));
assert(buf = S);
freemem(buf);
mpz_clear(z);
end;
procedure TTestGmpBinding.mp_sprintf_test;
const
N = 123456;
S = '123456';
var
z: mpz_t;
buf: pchar;
begin
mpz_init_set_ui(z, N);
getmem(buf, length(S) + 1);
assert(mp_sprintf(buf, Z_FMT, [@z]) = length(S));
assert(buf = S);
freemem(buf);
mpz_clear(z);
end;
procedure TTestGmpBinding.mp_sprintf_test2;
const
N = 123456;
S = '123456';
var
z: mpz_t;
buf: pchar;
begin
mpz_init_set_ui(z, N);
getmem(buf, length(S) + 1);
assert(mp_sprintf(buf, Z_FMT, @z) = length(S));
assert(buf = S);
freemem(buf);
mpz_clear(z);
end;
procedure TTestGmpBinding.mp_sscanf_test;
const
N = 3;
D = 2;
var q: mpq_t;
begin
mpq_init(q);
assert(mp_sscanf(pchar(inttostr(N) + '/' + inttostr(D)), Q_FMT, [@q]) = 1);
assert(mpq_cmp_ui(q, N, D) = 0);
mpq_clear(q);
end;
procedure TTestGmpBinding.mp_sscanf_test2;
const
N = 3;
D = 2;
var q: mpq_t;
begin
mpq_init(q);
assert(mp_sscanf(pchar(inttostr(N) + '/' + inttostr(D)), Q_FMT, @q) = 1);
assert(mpq_cmp_ui(q, N, D) = 0);
mpq_clear(q);
end;
procedure TTestGmpBinding.mpz_init_test;
var integer_: mpz_t;
begin
mpz_init(integer_);
assert(mpz_get_si(integer_) = 0);
mpz_clear(integer_);
end;
procedure TTestGmpBinding.mpz_clear_test;
const N = 1000000;
var integer_: mpz_t;
begin
mpz_init2(integer_, N);
assert(mpz_get_si(integer_) = 0);
mpz_clear(integer_);
end;
procedure TTestGmpBinding.mpz_init2_test;
const N = 1000000;
var integer_: mpz_t;
begin
mpz_init2(integer_, N);
assert(mpz_get_si(integer_) = 0);
mpz_clear(integer_);
end;
procedure TTestGmpBinding.mpz_init_set_si_test;
const N = -1000000;
var rop: mpz_t;
begin
mpz_init_set_si(rop, N);
assert(mpz_get_si(rop) = N);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_init_set_ui_test;
const N = 1000000;
var rop: mpz_t;
begin
mpz_init_set_ui(rop, N);
assert(mpz_get_ui(rop) = N);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_init_set_d_test;
const N = -1000000;
var rop: mpz_t;
begin
mpz_init_set_d(rop, N);
assert(mpz_get_si(rop) = N);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_init_set_test;
const N = -1000000;
var rop, op: mpz_t;
begin
mpz_init_set_si(op, N);
mpz_init_set(rop, op);
assert(mpz_get_si(rop) = N);
mpz_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_init_set_str_test;
const N = 1000000;
var rop: mpz_t;
begin
assert(mpz_init_set_str(rop, pchar(inttostr(N)), BASE10) = 0);
assert(mpz_get_si(rop) = N);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_realloc_test;
const N = 1000;
var integer_: mpz_t;
begin
mpz_init(integer_);
mpz_realloc(integer_, N);
mpz_clear(integer_)
end;
procedure TTestGmpBinding.mpz_realloc2_test;
const N = 1000;
var integer_: mpz_t;
begin
mpz_init(integer_);
mpz_realloc2(integer_, N);
mpz_clear(integer_)
end;
procedure TTestGmpBinding.mpz_getlimbn_test;
const N = 1234;
var op: mpz_t;
begin
mpz_init_set_ui(op, N);
assert(mpz_getlimbn(op, 0) = N);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_export_test;
type t = word;
const
N = 1000000;
BUF_HIGH = sizeof(N) div sizeof(t);
var
export_op, import_op: mpz_t;
buf: array[0..BUF_HIGH] of t;
count: sizeuint;
begin
mpz_init_set_si(export_op, N);
mpz_init(import_op);
mpz_export(buf, count, -1, sizeof(t), 0, 0, export_op);
mpz_import(import_op, count, -1, sizeof(t), 0, 0, buf);
assert(mpz_get_si(export_op) =mpz_get_si(import_op));
mpz_clear(export_op);
mpz_clear(import_op);
end;
procedure TTestGmpBinding.mpz_import_test;
type t = word;
const
N = 1000000;
BUF_HIGH = sizeof(N) div sizeof(t);
var
export_op, import_op: mpz_t;
buf: array[0..BUF_HIGH] of t;
count: sizeuint;
begin
mpz_init_set_si(export_op, N);
mpz_init(import_op);
mpz_export(buf, count, -1, sizeof(t), 0, 0, export_op);
mpz_import(import_op, count, -1, sizeof(t), 0, 0, buf);
assert(mpz_get_si(export_op) =mpz_get_si(import_op));
mpz_clear(export_op);
mpz_clear(import_op);
end;
procedure TTestGmpBinding.mpz_swap_test;
const
ROP_1 = -1000;
ROP_2 = 1000000;
var rop1, rop2: mpz_t;
begin
mpz_init_set_si(rop1, ROP_1);
mpz_init_set_si(rop2, ROP_2);
mpz_swap(rop1, rop2);
assert(mpz_get_si(rop1) = ROP_2);
assert(mpz_get_si(rop2) = ROP_1);
mpz_clear(rop1);
mpz_clear(rop2);
end;
procedure TTestGmpBinding.mpz_set_test;
const OP_ = 1000000;
var rop, op: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op, OP_);
mpz_set(rop, op);
assert(mpz_get_si(rop) = OP_);
mpz_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_set_d_test;
const OP_ = 1000000;
var rop: mpz_t;
begin
mpz_init(rop);
mpz_set_d(rop, OP_);
assert(mpz_get_si(rop) = OP_);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_set_f_test;
const OP_ = -10;
var
op: mpf_t;
rop: mpz_t;
begin
mpf_init_set_si(op, OP_);
mpz_init(rop);
mpz_set_f(rop, op);
assert(mpz_get_si(rop) = OP_);
mpz_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpz_set_q_test;
const OP_ = -10;
var
op: mpq_t;
rop: mpz_t;
begin
mpq_init(op);
mpz_init(rop);
mpq_set_si(op, OP_, 1);
mpz_set_q(rop, op);
assert(mpz_get_si(rop) = OP_);
mpz_clear(rop);
mpq_clear(op);
end;
procedure TTestGmpBinding.mpz_set_si_test;
const OP_ = -1000000;
var rop: mpz_t;
begin
mpz_init(rop);
mpz_set_si(rop, OP_);
assert(mpz_get_si(rop) = OP_);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_set_str_test;
const OP_ = -1000000;
var rop: mpz_t;
begin
mpz_init(rop);
assert(mpz_set_str(rop, pchar(inttostr(OP_)), BASE10) = 0);
assert(mpz_get_si(rop) = OP_);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_set_ui_test;
const OP_ = 1000000;
var rop: mpz_t;
begin
mpz_init(rop);
mpz_set_ui(rop, OP_);
assert(mpz_get_si(rop) = OP_);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_get_d_test;
const N = -1000;
var op: mpz_t;
begin
mpz_init_set_si(op, N);
assert(mpz_get_d(op) = N);
mpz_clear(op)
end;
procedure TTestGmpBinding.mpz_get_d_2exp_test;
const
N_LG2 = 4;
N = 1 shl N_LG2;
var
op: mpz_t;
exp: mp_exp_t;
begin
mpz_init_set_si(op, N);
assert(mpz_get_d_2exp(exp, op) = 1 / 2);
assert(exp = N_LG2 + 1);
mpz_clear(op)
end;
procedure TTestGmpBinding.mpz_get_si_test;
const N = -1000000;
var op: mpz_t;
begin
mpz_init_set_si(op, N);
assert(mpz_get_si(op) = N);
mpz_clear(op)
end;
procedure TTestGmpBinding.mpz_get_str_test;
const N = -1000000;
var
op: mpz_t;
p: pchar;
s0, s1: string;
begin
mpz_init_set_si(op, N);
s0 := inttostr(N);
p :=mpz_get_str(nil, BASE10, op);
assert(s0 = p);
freemem(p);
setlength(s1, length(s0));
assert(pointer(mpz_get_str(pchar(s1), BASE10, op)) = pointer(s1));
assert(s0 = s1);
mpz_clear(op)
end;
procedure TTestGmpBinding.mpz_get_ui_test;
const N = 1000000;
var op: mpz_t;
begin
mpz_init_set_ui(op, N);
assert(mpz_get_ui(op) = N);
mpz_clear(op)
end;
procedure TTestGmpBinding.mpz_add_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_add(rop, op1, op2);
assert(mpz_get_si(rop) = OP_1 + OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_add_ui_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_add_ui(rop, op1, OP_2);
assert(mpz_get_si(rop) = OP_1 + OP_2);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_sub_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_sub(rop, op1, op2);
assert(mpz_get_si(rop) = OP_1 - OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_sub_ui_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_sub_ui(rop, op1, OP_2);
assert(mpz_get_si(rop) = OP_1 - OP_2);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_ui_sub_test;
const
OP_1 = 1000;
OP_2 = 1000000;
var rop, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op2, OP_2);
mpz_ui_sub(rop, OP_1, op2);
assert(mpz_get_si(rop) = OP_1 - OP_2);
mpz_clear(rop);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_mul_test;
const
OP_1 = -10;
OP_2 = 1000;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_mul(rop, op1, op2);
assert(mpz_get_si(rop) = OP_1 * OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_mul_si_test;
const
OP_1 = 10;
OP_2 = -1000;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_mul_si(rop, op1, OP_2);
assert(mpz_get_si(rop) = OP_1 * OP_2);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_mul_ui_test;
const
OP_1 = -10;
OP_2 = 1000;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_mul_ui(rop, op1, OP_2);
assert(mpz_get_si(rop) = OP_1 * OP_2);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_addmul_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1, op2: mpz_t;
begin
mpz_init_set_si(rop, ROP_);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_addmul(rop, op1, op2);
assert(mpz_get_si(rop) = ROP_ + OP_1 * OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_addmul_ui_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1: mpz_t;
begin
mpz_init_set_si(rop, ROP_);
mpz_init_set_si(op1, OP_1);
mpz_addmul_ui(rop, op1, OP_2);
assert(mpz_get_si(rop) = ROP_ + OP_1 * OP_2);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_submul_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1, op2: mpz_t;
begin
mpz_init_set_si(rop, ROP_);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_submul(rop, op1, op2);
assert(mpz_get_si(rop) = ROP_ - OP_1 * OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_submul_ui_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1: mpz_t;
begin
mpz_init_set_si(rop, ROP_);
mpz_init_set_si(op1, OP_1);
mpz_submul_ui(rop, op1, OP_2);
assert(mpz_get_si(rop) = ROP_ - OP_1 * OP_2);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_mul_2exp_test;
const
OP_1 = 10;
OP_2 = 10;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_mul_2exp(rop, op1, OP_2);
assert(mpz_get_si(rop) = OP_1 * (1 shl OP_2));
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_neg_test;
const OP_ = 1000;
var rop, op: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op, OP_);
mpz_neg(rop, op);
assert(mpz_get_si(rop) = -OP_);
mpz_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_abs_test;
const OP_ = -1000;
var rop, op: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op, OP_);
mpz_abs(rop, op);
assert(mpz_get_si(rop) = abs(OP_));
mpz_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_cdiv_q_test;
const
N_ = -17;
D_ = 4;
var q, n, d: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_cdiv_q(q, n, d);
assert(mpz_get_si(q) = ceil(N_ / D_));
mpz_clear(q);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_fdiv_q_test;
const
N_ = -17;
D_ = 4;
var q, n, d: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_fdiv_q(q, n, d);
assert(mpz_get_si(q) = floor(N_ / D_));
mpz_clear(q);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_tdiv_q_test;
const
N_ = -17;
D_ = 4;
var q, n, d: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_tdiv_q(q, n, d);
assert(mpz_get_si(q) = trunc(N_ / D_));
mpz_clear(q);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_cdiv_q_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var q, n: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_cdiv_q_2exp(q, n, B_);
assert(mpz_get_si(q) = ceil(N_ / D_));
mpz_clear(q);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_fdiv_q_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var q, n: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_fdiv_q_2exp(q, n, B_);
assert(mpz_get_si(q) = floor(N_ / D_));
mpz_clear(q);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_tdiv_q_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var q, n: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_tdiv_q_2exp(q, n, B_);
assert(mpz_get_si(q) = trunc(N_ / D_));
mpz_clear(q);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_cdiv_q_ui_test;
const
N_ = -17;
D_ = 4;
var
q, n: mpz_t;
ur: valuint;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
ur :=mpz_cdiv_q_ui(q, n, D_);
assert(mpz_get_si(q) = ceil(N_ / D_));
assert(ur - abs(N_ -mpz_get_si(q) * D_) = 0);
mpz_clear(q);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_fdiv_q_ui_test;
const
N_ = -17;
D_ = 4;
var
q, n: mpz_t;
ur: valuint;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
ur :=mpz_fdiv_q_ui(q, n, D_);
assert(mpz_get_si(q) = floor(N_ / D_));
assert(ur - abs(N_ -mpz_get_si(q) * D_) = 0);
mpz_clear(q);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_tdiv_q_ui_test;
const
N_ = -17;
D_ = 4;
var
q, n: mpz_t;
ur: valuint;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
ur :=mpz_tdiv_q_ui(q, n, D_);
assert(mpz_get_si(q) = trunc(N_ / D_));
assert(ur - abs(N_ -mpz_get_si(q) * D_) = 0);
mpz_clear(q);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_cdiv_qr_test;
const
N_ = -17;
D_ = 4;
var q, r, n, d: mpz_t;
begin
mpz_init(q);
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_cdiv_qr(q, r, n, d);
assert(mpz_get_si(q) = ceil(N_ / D_));
assert(mpz_get_si(q) * D_ + mpz_get_si(r) = N_);
mpz_clear(q);
mpz_clear(r);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_fdiv_qr_test;
const
N_ = -17;
D_ = 4;
var q, r, n, d: mpz_t;
begin
mpz_init(q);
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_fdiv_qr(q, r, n, d);
assert(mpz_get_si(q) = floor(N_ / D_));
assert(mpz_get_si(q) * D_ + mpz_get_si(r) = N_);
mpz_clear(q);
mpz_clear(r);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_tdiv_qr_test;
const
N_ = -17;
D_ = 4;
var q, r, n, d: mpz_t;
begin
mpz_init(q);
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_tdiv_qr(q, r, n, d);
assert(mpz_get_si(q) = trunc(N_ / D_));
assert(mpz_get_si(q) * D_ + mpz_get_si(r) = N_);
mpz_clear(q);
mpz_clear(r);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_cdiv_qr_ui_test;
const
N_ = -17;
D_ = 4;
var
q, r, n: mpz_t;
ur: valuint;
begin
mpz_init(q);
mpz_init(r);
mpz_init_set_si(n, N_);
ur :=mpz_cdiv_qr_ui(q, r, n, D_);
assert(mpz_get_si(q) = ceil(N_ / D_));
assert(mpz_get_si(q) * D_ + mpz_get_si(r) = N_);
assert(ur - abs(mpz_get_si(r)) = 0);
mpz_clear(q);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_fdiv_qr_ui_test;
const
N_ = -17;
D_ = 4;
var
q, r, n: mpz_t;
ur: valuint;
begin
mpz_init(q);
mpz_init(r);
mpz_init_set_si(n, N_);
ur :=mpz_fdiv_qr_ui(q, r, n, D_);
assert(mpz_get_si(q) = floor(N_ / D_));
assert(mpz_get_si(q) * D_ + mpz_get_si(r) = N_);
assert(ur - abs(mpz_get_si(r)) = 0);
mpz_clear(q);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_tdiv_qr_ui_test;
const
N_ = -17;
D_ = 4;
var
q, r, n: mpz_t;
ur: valuint;
begin
mpz_init(q);
mpz_init(r);
mpz_init_set_si(n, N_);
ur :=mpz_tdiv_qr_ui(q, r, n, D_);
assert(mpz_get_si(q) = trunc(N_ / D_));
assert(mpz_get_si(q) * D_ + mpz_get_si(r) = N_);
assert(ur - abs(mpz_get_si(r)) = 0);
mpz_clear(q);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_cdiv_r_test;
const
N_ = -17;
D_ = 4;
var r, n, d: mpz_t;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_cdiv_r(r, n, d);
assert(ceil(N_ / D_) * D_ + mpz_get_si(r) = N_);
mpz_clear(r);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_fdiv_r_test;
const
N_ = -17;
D_ = 4;
var r, n, d: mpz_t;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_fdiv_r(r, n, d);
assert(floor(N_ / D_) * D_ + mpz_get_si(r) = N_);
mpz_clear(r);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_tdiv_r_test;
const
N_ = -17;
D_ = 4;
var r, n, d: mpz_t;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_tdiv_r(r, n, d);
assert(trunc(N_ / D_) * D_ + mpz_get_si(r) = N_);
mpz_clear(r);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_cdiv_r_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var r, n: mpz_t;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_cdiv_r_2exp(r, n, B_);
assert(ceil(N_ / D_) * D_ + mpz_get_si(r) = N_);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_fdiv_r_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var r, n: mpz_t;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_fdiv_r_2exp(r, n, B_);
assert(floor(N_ / D_) * D_ + mpz_get_si(r) = N_);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_tdiv_r_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var r, n: mpz_t;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_tdiv_r_2exp(r, n, B_);
assert(trunc(N_ / D_) * D_ + mpz_get_si(r) = N_);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_cdiv_r_ui_test;
const
N_ = -17;
D_ = 4;
var
r, n: mpz_t;
ur: valuint;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
ur :=mpz_cdiv_r_ui(r, n, D_);
assert(ceil(N_ / D_) * D_ + mpz_get_si(r) = N_);
assert(ur - abs(mpz_get_si(r)) = 0);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_fdiv_r_ui_test;
const
N_ = -17;
D_ = 4;
var
r, n: mpz_t;
ur: valuint;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
ur :=mpz_fdiv_r_ui(r, n, D_);
assert(floor(N_ / D_) * D_ + mpz_get_si(r) = N_);
assert(ur - abs(mpz_get_si(r)) = 0);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_tdiv_r_ui_test;
const
N_ = -17;
D_ = 4;
var
r, n: mpz_t;
ur: valuint;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
ur :=mpz_tdiv_r_ui(r, n, D_);
assert(trunc(N_ / D_) * D_ + mpz_get_si(r) = N_);
assert(ur - abs(mpz_get_si(r)) = 0);
mpz_clear(r);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_cdiv_ui_test;
const
N_ = -17;
D_ = 4;
var n: mpz_t;
begin
mpz_init_set_si(n, N_);
assert(mpz_cdiv_ui(n, D_) - abs(N_ - ceil(N_ / D_) * D_) = 0);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_fdiv_ui_test;
const
N_ = -17;
D_ = 4;
var n: mpz_t;
begin
mpz_init_set_si(n, N_);
assert(mpz_fdiv_ui(n, D_) - abs(N_ - floor(N_ / D_) * D_) = 0);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_tdiv_ui_test;
const
N_ = -17;
D_ = 4;
var n: mpz_t;
begin
mpz_init_set_si(n, N_);
assert(mpz_tdiv_ui(n, D_) = abs(N_ - trunc(N_ / D_) * D_));
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_mod_test;
const
N_ = 17;
D_ = -4;
var r, n, d: mpz_t;
begin
mpz_init(r);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_mod(r, n, d);
assert(mpz_get_si(r) = N_ mod abs(D_));
mpz_clear(r);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_divexact_test;
const
N_ = -16;
D_ = 4;
var q, n, d: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
mpz_divexact(q, n, d);
assert(mpz_get_si(q) * D_ = N_);
mpz_clear(q);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_divexact_ui_test;
const
N_ = -16;
D_ = 4;
var q, n: mpz_t;
begin
mpz_init(q);
mpz_init_set_si(n, N_);
mpz_divexact_ui(q, n, D_);
assert(mpz_get_si(q) * D_ = N_);
mpz_clear(q);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_divisible_p_test;
const
N_ = -16;
D_ = 4;
var n, d: mpz_t;
begin
mpz_init_set_si(n, N_);
mpz_init_set_si(d, D_);
assert(mpz_divisible_p(n, d) <> 0);
mpz_set_si(n,mpz_get_si(n) + 1);
assert(mpz_divisible_p(n, d) = 0);
mpz_clear(n);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_divisible_ui_p_test;
const
N_ = -16;
D_ = 4;
var n: mpz_t;
begin
mpz_init_set_si(n, N_);
assert(mpz_divisible_ui_p(n, D_) <> 0);
mpz_set_si(n,mpz_get_si(n) + 1);
assert(mpz_divisible_ui_p(n, D_) = 0);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_divisible_2exp_p_test;
const
N_ = -16;
B_ = 2;
var n: mpz_t;
begin
mpz_init_set_si(n, N_);
assert(mpz_divisible_2exp_p(n, B_) <> 0);
mpz_set_si(n,mpz_get_si(n) + 1);
assert(mpz_divisible_ui_p(n, B_) = 0);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_congruent_p_test;
const
N_ = 23;
C_ = 6;
D_ = 17;
var n, c, d: mpz_t;
begin
mpz_init_set_si(n, N_);
mpz_init_set_si(c, C_);
mpz_init_set_si(d, D_);
assert(mpz_congruent_p(n, c, d) <> 0);
mpz_set_si(n,mpz_get_si(n) + 1);
assert(mpz_congruent_p(n, c, d) = 0);
mpz_clear(n);
mpz_clear(c);
mpz_clear(d);
end;
procedure TTestGmpBinding.mpz_congruent_2exp_p_test;
const
N_ = 23;
C_ = 7;
B_ = 4;
var n, c: mpz_t;
begin
mpz_init_set_si(n, N_);
mpz_init_set_si(c, C_);
assert(mpz_congruent_2exp_p(n, c, B_) <> 0);
mpz_set_si(n,mpz_get_si(n) + 1);
assert(mpz_congruent_2exp_p(n, c, B_) = 0);
mpz_clear(n);
mpz_clear(c);
end;
procedure TTestGmpBinding.mpz_congruent_ui_p_test;
const
N_ = 23;
C_ = 6;
D_ = 17;
var n: mpz_t;
begin
mpz_init_set_si(n, N_);
assert(mpz_congruent_ui_p(n, C_, D_) <> 0);
mpz_set_si(n,mpz_get_si(n) + 1);
assert(mpz_congruent_ui_p(n, C_, D_) = 0);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_powm_test;
const
N_EXP = 3;
N_MOD = 16;
ROP_ = 8;
var rop, base, exp, mod_: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(base, BASE10);
mpz_init_set_si(exp, N_EXP);
mpz_init_set_si(mod_, N_MOD);
mpz_powm(rop, base, exp, mod_);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(base);
mpz_clear(exp);
mpz_clear(mod_);
end;
procedure TTestGmpBinding.mpz_powm_ui_test;
const
N_EXP = 3;
N_MOD = 16;
ROP_ = 8;
var rop, base, mod_: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(base, BASE10);
mpz_init_set_si(mod_, N_MOD);
mpz_powm_ui(rop, base, N_EXP, mod_);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(base);
mpz_clear(mod_);
end;
procedure TTestGmpBinding.mpz_pow_ui_test;
const
BASE_ = 10;
EXP = 3;
var rop, base: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(base, BASE_);
mpz_pow_ui(rop, base, EXP);
assert(mpz_get_si(rop) = BASE_ ** EXP);
mpz_clear(rop);
mpz_clear(base);
end;
procedure TTestGmpBinding.mpz_ui_pow_ui_test;
const
BASE_ = 10;
EXP = 3;
var rop: mpz_t;
begin
mpz_init(rop);
mpz_ui_pow_ui(rop, BASE_, EXP);
assert(mpz_get_si(rop) = BASE_ ** EXP);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_root_test;
const
ROOT = 5;
N_ = 3;
var rop, op: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op, ROOT ** N_);
assert(mpz_root(rop, op, N_) <> 0);
assert(mpz_get_si(rop) = ROOT);
mpz_set_si(op, ROOT ** N_ + 1);
assert(mpz_root(rop, op, N_) = 0);
assert(mpz_get_si(rop) = ROOT);
mpz_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_rootrem_test;
const
ROOT_ = 5;
N_ = 3;
REM_ = 1;
var root, rem, u: mpz_t;
begin
assert(REM_ < ROOT_);
mpz_init(root);
mpz_init(rem);
mpz_init_set_si(u, ROOT_ ** N_);
mpz_rootrem(root, rem, u, N_);
assert(mpz_get_si(root) = ROOT_);
assert(mpz_get_si(rem) = 0);
mpz_set_si(u, ROOT_ ** N_ + REM_);
mpz_rootrem(root, rem, u, N_);
assert(mpz_get_si(root) = ROOT_);
assert(mpz_get_si(rem) = REM_);
mpz_clear(root);
mpz_clear(rem);
mpz_clear(u);
end;
procedure TTestGmpBinding.mpz_sqrt_test;
const ROOT = 5;
var rop, op: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op, ROOT ** 2);
mpz_sqrt(rop, op);
assert(mpz_get_si(rop) = ROOT);
mpz_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_sqrtrem_test;
const
ROOT = 5;
REM = 1;
var rop1, rop2, op: mpz_t;
begin
mpz_init(rop1);
mpz_init(rop2);
mpz_init_set_si(op, ROOT ** 2 + REM);
mpz_sqrtrem(rop1, rop2, op);
assert(mpz_get_si(rop1) = ROOT);
assert(mpz_get_si(rop2) = REM);
mpz_clear(rop1);
mpz_clear(rop2);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_perfect_power_p_test;
const
ROOT = 3;
EXP = 3;
var op: mpz_t;
begin
mpz_init_set_si(op, ROOT ** EXP);
assert(mpz_perfect_power_p(op) <> 0);
mpz_set_si(op, ROOT ** EXP + 1);
assert(mpz_perfect_power_p(op) = 0);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_perfect_square_p_test;
const ROOT = 3;
var op: mpz_t;
begin
mpz_init_set_si(op, ROOT ** 2);
assert(mpz_perfect_square_p(op) <> 0);
mpz_set_si(op, ROOT ** 2 or 2);
assert(mpz_perfect_square_p(op) = 0);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_probab_prime_p_test;
const
N_ = 127;
REPS = 5;
var n: mpz_t;
begin
mpz_init_set_si(n, N_);
assert(mpz_probab_prime_p(n, REPS) = 2);
mpz_set_si(n, N_ + 1);
assert(mpz_probab_prime_p(n, REPS) = 0);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_nextprime_test;
const
PRIME3 = 5;
PRIME4 = 7;
var rop, op: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op, PRIME3);
mpz_nextprime(rop, op);
assert(mpz_get_si(rop) = PRIME4);
mpz_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_gcd_test;
const
OP_1 = 42;
OP_2 = 56;
ROP_ = 14;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_gcd(rop, op1, op2);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_gcd_ui_test;
const
OP_1 = 42;
OP_2 = 56;
ROP_ = 14;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
assert(mpz_gcd_ui(rop, op1, OP_2) = ROP_);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_gcdext_test;
const
A_ = 42;
B_ = 56;
G_ = 14;
var g, s, t, a, b: mpz_t;
begin
mpz_init(g);
mpz_init(s);
mpz_init(t);
mpz_init_set_si(a, A_);
mpz_init_set_si(b, B_);
mpz_gcdext(g, s, t, a, b);
assert(mpz_get_si(g) = G_);
assert(A_ *mpz_get_si(s) + B_ *mpz_get_si(t) = G_);
mpz_clear(g);
mpz_clear(s);
mpz_clear(t);
mpz_clear(a);
mpz_clear(b);
end;
procedure TTestGmpBinding.mpz_lcm_test;
const
OP_1 = 21;
OP_2 = 6;
ROP_ = 42;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_lcm(rop, op1, op2);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_lcm_ui_test;
const
OP_1 = 21;
OP_2 = 6;
ROP_ = 42;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_lcm_ui(rop, op1, OP_2);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_invert_test;
const
OP_1 = 256;
OP_2 = 337;
ROP_ = 104;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
assert(mpz_invert(rop, op1, op2) <> 0);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_jacobi_test;
const
B0 = 11;
A0 = 13 * B0;
AM1 = 1001;
BM1 = 9907;
A1 = 4;
B1 = 7;
var a, b: mpz_t;
begin
mpz_init_set_si(a, A0);
mpz_init_set_si(b, B0);
assert(mpz_jacobi(a, b) = 0);
mpz_set_si(a, AM1);
mpz_set_si(b, BM1);
assert(mpz_jacobi(a, b) = -1);
mpz_set_si(a, A1);
mpz_set_si(b, B1);
assert(mpz_jacobi(a, b) = 1);
mpz_clear(a);
mpz_clear(b);
end;
procedure TTestGmpBinding.mpz_kronecker_si_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var a: mpz_t;
begin
mpz_init_set_si(a, A_);
assert(mpz_kronecker_si(a, B1) = 1);
assert(mpz_kronecker_si(a, B0) = 0);
assert(mpz_kronecker_si(a, BM1) = -1);
mpz_clear(a);
end;
procedure TTestGmpBinding.mpz_kronecker_ui_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var a: mpz_t;
begin
mpz_init_set_si(a, A_);
assert(mpz_kronecker_ui(a, B1) = 1);
assert(mpz_kronecker_ui(a, B0) = 0);
assert(mpz_kronecker_ui(a, BM1) = -1);
mpz_clear(a);
end;
procedure TTestGmpBinding.mpz_si_kronecker_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var b: mpz_t;
begin
mpz_init_set_si(b, B1);
assert(mpz_si_kronecker(A_, b) = 1);
mpz_set_si(b, B0);
assert(mpz_si_kronecker(A_, b) = 0);
mpz_set_si(b, BM1);
assert(mpz_si_kronecker(A_, b) = -1);
mpz_clear(b);
end;
procedure TTestGmpBinding.mpz_ui_kronecker_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var b: mpz_t;
begin
mpz_init_set_si(b, B1);
assert(mpz_ui_kronecker(A_, b) = 1);
mpz_set_si(b, B0);
assert(mpz_ui_kronecker(A_, b) = 0);
mpz_set_si(b, BM1);
assert(mpz_ui_kronecker(A_, b) = -1);
mpz_clear(b);
end;
procedure TTestGmpBinding.mpz_remove_test;
const
F_ = 5;
OP_ = 3 * F_ * 7;
ROP_ = OP_ div F_;
var rop, op, f: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op, OP_);
mpz_init_set_si(f, F_);
assert(mpz_remove(rop, op, f) = 1);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(op);
mpz_clear(f);
end;
procedure TTestGmpBinding.mpz_fac_ui_test;
const
OP = 4;
ROP_ = 2 * 3 * 4;
var rop: mpz_t;
begin
mpz_init(rop);
mpz_fac_ui(rop, OP);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_bin_ui_test;
const
N_ = 7;
K = 3;
ROP_ = 35;
var rop, n: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(n, N_);
mpz_bin_ui(rop, n, K);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
mpz_clear(n);
end;
procedure TTestGmpBinding.mpz_bin_uiui_test;
const
N = 7;
K = 3;
ROP_ = 35;
var rop: mpz_t;
begin
mpz_init(rop);
mpz_bin_uiui(rop, N, K);
assert(mpz_get_si(rop) = ROP_);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_fib_ui_test;
const
N = 10;
FN_ = 55;
var fn: mpz_t;
begin
mpz_init(fn);
mpz_fib_ui(fn, N);
assert(mpz_get_si(fn) = FN_);
mpz_clear(fn);
end;
procedure TTestGmpBinding.mpz_fib2_ui_test;
const
N = 10;
FN_ = 55;
FNSUB1_ = 34;
var fn, fnsub1: mpz_t;
begin
mpz_init(fn);
mpz_init(fnsub1);
mpz_fib2_ui(fn, fnsub1, N);
assert(mpz_get_si(fn) = FN_);
assert(mpz_get_si(fnsub1) = FNSUB1_);
mpz_clear(fn);
mpz_clear(fnsub1);
end;
procedure TTestGmpBinding.mpz_lucnum_ui_test;
const
N = 10;
LN_ = 123;
var ln: mpz_t;
begin
mpz_init(ln);
mpz_lucnum_ui(ln, N);
assert(mpz_get_si(ln) = LN_);
mpz_clear(ln);
end;
procedure TTestGmpBinding.mpz_lucnum2_ui_test;
const
N = 10;
LN_ = 123;
LNSUB1_ = 76;
var ln, lnsub1: mpz_t;
begin
mpz_init(ln);
mpz_init(lnsub1);
mpz_lucnum2_ui(ln, lnsub1, N);
assert(mpz_get_si(ln) = LN_);
assert(mpz_get_si(lnsub1) = LNSUB1_);
mpz_clear(ln);
mpz_clear(lnsub1);
end;
procedure TTestGmpBinding.mpz_cmp_test;
const
OP_1 = -10;
OP_2 = OP_1 - 1;
var op1, op2: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
assert(mpz_cmp(op1, op2) > 0);
mpz_set_si(op2, OP_1);
assert(mpz_cmp(op1, op2) = 0);
mpz_set_si(op2, OP_1 + 1);
assert(mpz_cmp(op1, op2) < 0);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_cmp_d_test;
const
OP_1 = -10;
var op1: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
assert(mpz_cmp_d(op1, OP_1 - 1) > 0);
assert(mpz_cmp_d(op1, OP_1) = 0);
assert(mpz_cmp_d(op1, OP_1 + 1) < 0);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_cmp_si_test;
const
OP_1 = -10;
var op1: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
assert(mpz_cmp_si(op1, OP_1 - 1) > 0);
assert(mpz_cmp_si(op1, OP_1) = 0);
assert(mpz_cmp_si(op1, OP_1 + 1) < 0);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_cmp_ui_test;
const
OP_1 = 10;
var op1: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
assert(mpz_cmp_ui(op1, OP_1 - 1) > 0);
assert(mpz_cmp_ui(op1, OP_1) = 0);
assert(mpz_cmp_ui(op1, OP_1 + 1) < 0);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_cmpabs_test;
const
OP_1 = -10;
OP_2 = -OP_1 - 1;
var op1, op2: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, -OP_2);
assert(mpz_cmpabs(op1, op2) > 0);
mpz_set_si(op2, -OP_1);
assert(mpz_cmpabs(op1, op2) = 0);
mpz_set_si(op2, -OP_1 + 1);
assert(mpz_cmpabs(op1, op2) < 0);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_cmpabs_d_test;
const OP_1 = -10;
var op1: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
assert(mpz_cmpabs_d(op1, -OP_1 - 1) > 0);
assert(mpz_cmpabs_d(op1, -OP_1) = 0);
assert(mpz_cmpabs_d(op1, -OP_1 + 1) < 0);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_cmpabs_ui_test;
const OP_1 = -10;
var op1: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
assert(mpz_cmpabs_ui(op1, -OP_1 - 1) > 0);
assert(mpz_cmpabs_ui(op1, -OP_1) = 0);
assert(mpz_cmpabs_ui(op1, -OP_1 + 1) < 0);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_and_test;
const
OP_1 = $c;
OP_2 = $a;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_and(rop, op1, op2);
assert(mpz_get_si(rop) = OP_1 and OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_ior_test;
const
OP_1 = $c;
OP_2 = $a;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_ior(rop, op1, op2);
assert(mpz_get_si(rop) = OP_1 or OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_xor_test;
const
OP_1 = $c;
OP_2 = $a;
var rop, op1, op2: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
mpz_xor(rop, op1, op2);
assert(mpz_get_si(rop) = OP_1 xor OP_2);
mpz_clear(rop);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_com_test;
const
OP_1 = 2;
var rop, op1: mpz_t;
begin
mpz_init(rop);
mpz_init_set_si(op1, OP_1);
mpz_com(rop, op1);
assert(mpz_get_si(rop) = not OP_1 );
mpz_clear(rop);
mpz_clear(op1);
end;
procedure TTestGmpBinding.mpz_popcount_test;
const
OP_ = $55AA;
N = 8;
var op: mpz_t;
begin
mpz_init_set_si(op, OP_);
assert(mpz_popcount(op) = N);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_hamdist_test;
const
OP_1 = $55;
OP_2 = $7A;
N = 5;
var op1, op2: mpz_t;
begin
mpz_init_set_si(op1, OP_1);
mpz_init_set_si(op2, OP_2);
assert(mpz_hamdist(op1, op2) = N);
mpz_clear(op1);
mpz_clear(op2);
end;
procedure TTestGmpBinding.mpz_scan0_test;
const
OP_ = $F75;
STARTING_BIT = 4;
N = 7;
var op: mpz_t;
begin
mpz_init_set_si(op, OP_);
assert(mpz_scan0(op, STARTING_BIT) = N);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_scan1_test;
const
OP_ = $85;
STARTING_BIT = 4;
N = 7;
var op: mpz_t;
begin
mpz_init_set_si(op, OP_);
assert(mpz_scan1(op, STARTING_BIT) = N);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_setbit_test;
const
ROP_ = $F75;
BIT_INDEX = 7;
var rop: mpz_t;
begin
mpz_init_set_ui(rop, ROP_);
mpz_setbit(rop, BIT_INDEX);
assert(mpz_get_ui(rop) = ROP_ or (1 shl BIT_INDEX));
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_clrbit_test;
const
ROP_ = $F75;
BIT_INDEX = 9;
var rop: mpz_t;
begin
mpz_init_set_ui(rop, ROP_);
mpz_clrbit(rop, BIT_INDEX);
assert(mpz_get_ui(rop) = ROP_ and not (1 shl BIT_INDEX));
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_combit_test;
const
ROP_ = $F75;
BIT_INDEX = 7;
var rop: mpz_t;
begin
mpz_init_set_ui(rop, ROP_);
mpz_combit(rop, BIT_INDEX);
assert(mpz_get_ui(rop) = ROP_ xor (1 shl BIT_INDEX));
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_tstbit_test;
const
ROP_ = $F75;
BIT_INDEX1 = 7;
BIT_INDEX2 = 8;
var rop: mpz_t;
begin
mpz_init_set_ui(rop, ROP_);
assert(longbool(mpz_tstbit(rop, BIT_INDEX1)) = longbool(ROP_ and (1 shl BIT_INDEX1)));
assert(longbool(mpz_tstbit(rop, BIT_INDEX2)) = longbool(ROP_ and (1 shl BIT_INDEX2)));
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_urandomb_test;
const
B = 8 * (sizeof(valuint) - 1);
N = 1 shl B;
var
rop: mpz_t;
state: randstate_t;
begin
mp_randinit_default(state);
mpz_init(rop);
mpz_urandomb(rop, state, B);
assert(mpz_cmp_ui(rop, N) < 0);
mpz_clear(rop);
mp_randclear(state);
end;
procedure TTestGmpBinding.mpz_urandomm_test;
const
N_ = 1000000;
var
rop, n: mpz_t;
state: randstate_t;
begin
mp_randinit_default(state);
mpz_init(rop);
mpz_init_set_ui(n, N_);
mpz_urandomm(rop, state, n);
assert(mpz_cmp_ui(rop, N_) < 0);
mpz_clear(rop);
mpz_clear(n);
mp_randclear(state);
end;
procedure TTestGmpBinding.mpz_rrandomb_test;
const
B = 8 * sizeof(valuint) - 2;
N = 1 shl B;
var
rop: mpz_t;
state: randstate_t;
begin
mp_randinit_default(state);
mpz_init(rop);
mpz_rrandomb(rop, state, B);
assert(mpz_cmp_ui(rop, N) < 0);
mpz_clear(rop);
mp_randclear(state);
end;
procedure TTestGmpBinding.mpz_fits_ushort_p_test;
var op: mpz_t;
begin
mpz_init_set_ui(op, high(word));
assert(longbool(mpz_fits_ushort_p(op)));
mpz_add_ui(op, op, 1);
assert(not longbool(mpz_fits_ushort_p(op)));
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_fits_sshort_p_test;
var op: mpz_t;
begin
mpz_init_set_si(op, high(smallint));
assert(longbool(mpz_fits_sshort_p(op)));
mpz_add_ui(op, op, 1);
assert(not longbool(mpz_fits_sshort_p(op)));
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_fits_uint_p_test;
var op: mpz_t;
begin
mpz_init_set_ui(op, high(cardinal));
assert(longbool(mpz_fits_uint_p(op)));
mpz_add_ui(op, op, 1);
assert(not longbool(mpz_fits_uint_p(op)));
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_fits_sint_p_test;
var op: mpz_t;
begin
mpz_init_set_si(op, high(integer));
assert(longbool(mpz_fits_sint_p(op)));
mpz_add_ui(op, op, 1);
assert(not longbool(mpz_fits_sint_p(op)));
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_fits_ulong_p_test;
var op: mpz_t;
begin
mpz_init_set_ui(op, high(valuint));
assert(longbool(mpz_fits_ulong_p(op)));
mpz_add_ui(op, op, 1);
assert(not longbool(mpz_fits_ulong_p(op)));
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_fits_slong_p_test;
var op: mpz_t;
begin
mpz_init_set_si(op, high(valsint));
assert(longbool(mpz_fits_slong_p(op)));
mpz_add_ui(op, op, 1);
assert(not longbool(mpz_fits_slong_p(op)));
mpz_clear(op);
end;
procedure TTestGmpBinding.mpz_sizeinbase_test;
const
OP_ = 1000000;
var rop: mpz_t;
begin
mpz_init_set_ui(rop, OP_);
assert(mpz_sizeinbase(rop, BASE10) - length(inttostr(OP_)) = 0);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpz_size_test;
var rop: mpz_t;
begin
mpz_init(rop);
assert(mpz_size(rop) = 0);
mpz_add_ui(rop, rop, 1);
assert(mpz_size(rop) = 1);
mpz_clear(rop);
end;
procedure TTestGmpBinding.mpq_init_test;
var rational: mpq_t;
begin
mpq_init(rational);
assert(mpq_cmp_ui(rational, 0, 1) = 0);
mpq_clear(rational);
end;
procedure TTestGmpBinding.mpq_clear_test;
var rational: mpq_t;
begin
mpq_init(rational);
mpq_clear(rational);
end;
procedure TTestGmpBinding.mpq_set_ui_test;
const
OP_1 = 13;
OP_2 = 17;
var rational: mpq_t;
begin
mpq_init(rational);
mpq_set_ui(rational, OP_1, OP_2);
assert(mpq_cmp_ui(rational, OP_1, OP_2) = 0);
mpq_clear(rational);
end;
procedure TTestGmpBinding.mpq_set_si_test;
const
OP_1 = -13;
OP_2 = 17;
var rational: mpq_t;
begin
mpq_init(rational);
mpq_set_si(rational, OP_1, OP_2);
assert(mpq_cmp_si(rational, OP_1, OP_2) = 0);
mpq_clear(rational);
end;
procedure TTestGmpBinding.mpq_canonicalize_test;
const
OP_1 = -13;
OP_2 = 17;
CF = 11;
var rational: mpq_t;
begin
mpq_init(rational);
mpq_set_si(rational, CF * OP_1, CF * OP_2);
mpq_canonicalize(rational);
assert(mpq_cmp_si(rational, OP_1, OP_2) = 0);
mpq_clear(rational);
end;
procedure TTestGmpBinding.mpq_set_test;
const
OP_1 = -13;
OP_2 = 17;
var rational1, rational2: mpq_t;
begin
mpq_init(rational1);
mpq_init(rational2);
mpq_set_si(rational2, OP_1, OP_2);
mpq_set(rational1, rational2);
assert(mpq_cmp_si(rational1, OP_1, OP_2) = 0);
mpq_clear(rational1);
mpq_clear(rational2);
end;
procedure TTestGmpBinding.mpq_setmpz_test;
const
OP_1 = -13;
var
rational: mpq_t;
op: mpz_t;
begin
mpq_init(rational);
mpz_init_set_si(op, OP_1);
mpq_set_z(rational, op);
assert(mpq_cmp_si(rational, OP_1, 1) = 0);
mpq_clear(rational);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpq_set_str_test;
const
OP_1 = -13;
OP_2 = 17;
var rational: mpq_t;
begin
mpq_init(rational);
assert(mpq_set_str(rational, pchar(inttostr(OP_1) + '/' + inttostr(OP_2)), BASE10) = 0);
assert(mpq_cmp_si(rational, OP_1, OP_2) = 0);
assert(mpq_set_str(rational, pchar(inttostr(OP_1) + '*' + inttostr(OP_2)), BASE10) <> 0);
mpq_clear(rational);
end;
procedure TTestGmpBinding.mpq_swap_test;
const
ROP_1N = -13;
ROP_1D = 17;
ROP_2N = -23;
ROP_2D = 31;
var rop1, rop2: mpq_t;
begin
mpq_init(rop1);
mpq_init(rop2);
mpq_set_si(rop1, ROP_1N, ROP_1D);
mpq_set_si(rop2, ROP_2N, ROP_2D);
mpq_swap(rop1, rop2);
assert(mpq_cmp_si(rop1, ROP_2N, ROP_2D) = 0);
assert(mpq_cmp_si(rop2, ROP_1N, ROP_1D) = 0);
mpq_clear(rop1);
mpq_clear(rop2);
end;
procedure TTestGmpBinding.mpq_get_d_test;
const
OP_1 = -1;
OP_2 = 2;
var op: mpq_t;
begin
mpq_init(op);
mpq_set_si(op, OP_1, OP_2);
assert(mpq_get_d(op) = OP_1 / OP_2);
mpq_clear(op);
end;
procedure TTestGmpBinding.mpq_set_d_test;
const
OP_1 = -1;
OP_2 = 2;
var rop: mpq_t;
begin
mpq_init(rop);
mpq_set_d(rop, OP_1 / OP_2);
assert(mpq_cmp_si(rop, OP_1, OP_2) = 0);
mpq_clear(rop);
end;
procedure TTestGmpBinding.mpq_set_f_test;
const OP_ = -10;
var
op: mpf_t;
rop: mpq_t;
begin
mpf_init_set_si(op, OP_);
mpq_init(rop);
mpq_set_f(rop, op);
assert(mpq_get_d(rop) = OP_);
mpq_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpq_get_str_test;
const
OP_1 = -1;
OP_2 = 2;
var
op: mpq_t;
p: pchar;
begin
mpq_init(op);
mpq_set_si(op, OP_1, OP_2);
p := mpq_get_str(nil, BASE10, op);
assert(p = inttostr(OP_1) + '/' + inttostr(OP_2));
freemem(p);
mpq_clear(op);
end;
procedure TTestGmpBinding.mpq_add_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var sum, addend1, addend2: mpq_t;
begin
mpq_init(sum);
mpq_init(addend1);
mpq_init(addend2);
mpq_set_si(addend1, N1, D1);
mpq_set_si(addend2, N2, D2);
mpq_add(sum, addend1, addend2);
assert(mpq_cmp_si(sum, N1 * D2 + N2 * D1, D1 * D2) = 0);
mpq_clear(sum);
mpq_clear(addend1);
mpq_clear(addend2);
end;
procedure TTestGmpBinding.mpq_sub_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var difference, minuend, subtrahend: mpq_t;
begin
mpq_init(difference);
mpq_init(minuend);
mpq_init(subtrahend);
mpq_set_si(minuend, N1, D1);
mpq_set_si(subtrahend, N2, D2);
mpq_sub(difference, minuend, subtrahend);
assert(mpq_cmp_si(difference, N1 * D2 - N2 * D1, D1 * D2) = 0);
mpq_clear(difference);
mpq_clear(minuend);
mpq_clear(subtrahend);
end;
procedure TTestGmpBinding.mpq_mul_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var product, multiplier, multiplicant: mpq_t;
begin
mpq_init(product);
mpq_init(multiplier);
mpq_init(multiplicant);
mpq_set_si(multiplier, N1, D1);
mpq_set_si(multiplicant, N2, D2);
mpq_mul(product, multiplier, multiplicant);
assert(mpq_cmp_si(product, N1 * N2, D1 * D2) = 0);
mpq_clear(product);
mpq_clear(multiplier);
mpq_clear(multiplicant);
end;
procedure TTestGmpBinding.mpq_mul_2exp_test;
const
N1 = 5;
D1 = 3;
OP_2 = 2;
var rop, op1: mpq_t;
begin
mpq_init(rop);
mpq_init(op1);
mpq_set_si(op1, N1, D1);
mpq_mul_2exp(rop, op1, OP_2);
assert(mpq_cmp_si(rop, N1 * (1 shl OP_2), D1) = 0);
mpq_clear(rop);
mpq_clear(op1);
end;
procedure TTestGmpBinding.mpq_div_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var quotient, dividend, divisor: mpq_t;
begin
mpq_init(quotient);
mpq_init(dividend);
mpq_init(divisor);
mpq_set_si(dividend, N1, D1);
mpq_set_si(divisor, N2, D2);
mpq_div(quotient, dividend, divisor);
assert(mpq_cmp_si(quotient, -N1 * D2, -D1 * N2) = 0);
mpq_clear(quotient);
mpq_clear(dividend);
mpq_clear(divisor);
end;
procedure TTestGmpBinding.mpq_div_2exp_test;
const
N1 = 5;
D1 = 3;
OP_2 = 2;
var rop, op1: mpq_t;
begin
mpq_init(rop);
mpq_init(op1);
mpq_set_si(op1, N1, D1);
mpq_div_2exp(rop, op1, OP_2);
assert(mpq_cmp_si(rop, N1, D1 * (1 shl OP_2)) = 0);
mpq_clear(rop);
mpq_clear(op1);
end;
procedure TTestGmpBinding.mpq_neg_test;
const
N1 = -5;
D1 = 3;
var negated_operand, operand: mpq_t;
begin
mpq_init(negated_operand);
mpq_init(operand);
mpq_set_si(operand, N1, D1);
mpq_neg(negated_operand, operand);
assert(mpq_cmp_si(negated_operand, -N1, D1) = 0);
mpq_clear(negated_operand);
mpq_clear(operand);
end;
procedure TTestGmpBinding.mpq_abs_test;
const
N1 = 5;
D1 = 3;
var rop, op: mpq_t;
begin
mpq_init(rop);
mpq_init(op);
mpq_set_si(op, -N1, D1);
mpq_abs(rop, op);
assert(mpq_cmp_si(rop, N1, D1) = 0);
mpq_clear(rop);
mpq_clear(op);
end;
procedure TTestGmpBinding.mpq_inv_test;
const
N1 = -5;
D1 = 3;
var inverted_number, number: mpq_t;
begin
mpq_init(inverted_number);
mpq_init(number);
mpq_set_si(number, N1, D1);
mpq_inv(inverted_number, number);
assert(mpq_cmp_si(inverted_number, -D1, -N1) = 0);
mpq_clear(inverted_number);
mpq_clear(number);
end;
procedure TTestGmpBinding.mpq_cmp_test;
const
N1 = -7;
D1 = 5;
var op1, op2: mpq_t;
begin
mpq_init(op1);
mpq_init(op2);
mpq_set_si(op1, N1, D1);
mpq_set_si(op2, N1, D1);
assert(mpq_cmp(op1, op2) = 0);
mpq_set_si(op1, N1 + 1, D1);
assert(mpq_cmp(op1, op2) > 0);
mpq_set_si(op1, N1 - 1, D1);
assert(mpq_cmp(op1, op2) < 0);
mpq_clear(op1);
mpq_clear(op2);
end;
procedure TTestGmpBinding.mpq_cmp_si_test;
const
N1 = -7;
D1 = 5;
var op1: mpq_t;
begin
mpq_init(op1);
mpq_set_si(op1, N1, D1);
assert(mpq_cmp_si(op1, N1, D1) = 0);
assert(mpq_cmp_si(op1, N1 - 1, D1) > 0);
assert(mpq_cmp_si(op1, N1 + 1, D1) < 0);
mpq_clear(op1);
end;
procedure TTestGmpBinding.mpq_cmp_ui_test;
const
N1 = 7;
D1 = 5;
var op1: mpq_t;
begin
mpq_init(op1);
mpq_set_si(op1, N1, D1);
assert(mpq_cmp_ui(op1, N1, D1) = 0);
assert(mpq_cmp_ui(op1, N1 - 1, D1) > 0);
assert(mpq_cmp_ui(op1, N1 + 1, D1) < 0);
mpq_clear(op1);
end;
procedure TTestGmpBinding.mpq_equal_test;
const
N1 = -7;
D1 = 5;
var op1, op2: mpq_t;
begin
mpq_init(op1);
mpq_init(op2);
mpq_set_si(op1, N1, D1);
mpq_set_si(op2, N1, D1);
assert(longbool(mpq_equal(op1, op2)));
mpq_set_si(op1, N1 + 1, D1);
assert(not longbool(mpq_equal(op1, op2)));
mpq_set_si(op1, N1 - 1, D1);
assert(not longbool(mpq_equal(op1, op2)));
mpq_clear(op1);
mpq_clear(op2);
end;
procedure TTestGmpBinding.mpq_get_num_test;
const
N1 = -7;
D1 = 5;
var
rational: mpq_t;
numerator: mpz_t;
begin
mpq_init(rational);
mpz_init(numerator);
mpq_set_si(rational, N1, D1);
mpq_get_num(numerator, rational);
assert(mpz_get_si(numerator) = N1);
mpq_clear(rational);
mpz_clear(numerator);
end;
procedure TTestGmpBinding.mpq_get_den_test;
const
N1 = -7;
D1 = 5;
var
rational: mpq_t;
denominator: mpz_t;
begin
mpq_init(rational);
mpz_init(denominator);
mpq_set_si(rational, N1, D1);
mpq_get_den(denominator, rational);
assert(mpz_get_si(denominator) = D1);
mpq_clear(rational);
mpz_clear(denominator);
end;
procedure TTestGmpBinding.mpq_set_num_test;
const
N1 = -7;
D1 = 5;
N2 = 3;
var
rational: mpq_t;
numerator: mpz_t;
begin
mpq_init(rational);
mpz_init_set_si(numerator, N2);
mpq_set_si(rational, N1, D1);
mpq_set_num(rational, numerator);
assert(mpq_cmp_si(rational, N2, D1) = 0);
mpq_clear(rational);
mpz_clear(numerator);
end;
procedure TTestGmpBinding.mpq_set_den_test;
const
N1 = -7;
D1 = 5;
D2 = 3;
var
rational: mpq_t;
denominator: mpz_t;
begin
mpq_init(rational);
mpz_init_set_si(denominator, D2);
mpq_set_si(rational, N1, D1);
mpq_set_den(rational, denominator);
assert(mpq_cmp_si(rational, N1, D2) = 0);
mpq_clear(rational);
mpz_clear(denominator);
end;
procedure TTestGmpBinding.mpf_get_default_prec_test;
begin
assert(mpf_get_default_prec > 0);
end;
procedure TTestGmpBinding.mpf_set_default_prec_test;
var prec: valuint;
begin
prec := mpf_get_default_prec;
mpf_set_default_prec(2 * prec);
assert(mpf_get_default_prec = 2 * prec);
mpf_set_default_prec(prec);
end;
procedure TTestGmpBinding.mpf_init_test;
var x: mpf_t;
begin
mpf_init(x);
assert(mpf_get_prec(x) = mpf_get_default_prec);
mpf_clear(x);
end;
procedure TTestGmpBinding.mpf_init2_test;
var x: mpf_t;
begin
mpf_init2(x, 2 * mpf_get_default_prec);
assert(mpf_get_prec(x) = 2 * mpf_get_default_prec);
mpf_clear(x);
end;
procedure TTestGmpBinding.mpf_clear_test;
var x: mpf_t;
begin
mpf_init(x);
mpf_clear(x);
end;
procedure TTestGmpBinding.mpf_get_prec_test;
var x: mpf_t;
begin
mpf_init(x);
mpf_set_prec(x, 2 * mpf_get_default_prec);
assert(mpf_get_prec(x) = 2 * mpf_get_default_prec);
mpf_clear(x);
end;
procedure TTestGmpBinding.mpf_set_prec_test;
var x: mpf_t;
begin
mpf_init(x);
mpf_set_prec(x, 2 * mpf_get_default_prec);
assert(mpf_get_prec(x) = 2 * mpf_get_default_prec);
mpf_clear(x);
end;
procedure TTestGmpBinding.mpf_set_prec_raw_test;
const N = 10;
var x: mpf_t;
begin
mpf_init2(x, N * mpf_get_default_prec);
mpf_set_prec_raw(x, mpf_get_default_prec);
mpf_set_prec_raw(x, N * mpf_get_default_prec);
mpf_clear(x);
end;
procedure TTestGmpBinding.mpf_set_q_test;
const OP_ = -10;
var
op: mpq_t;
rop: mpf_t;
begin
mpq_init(op);
mpf_init(rop);
mpq_set_si(op, OP_, 1);
mpf_set_q(rop, op);
assert(mpf_get_si(rop) = OP_);
mpf_clear(rop);
mpq_clear(op);
end;
procedure TTestGmpBinding.mpf_set_ui_test;
const OP = 1000000;
var rop: mpf_t;
begin
mpf_init(rop);
mpf_set_ui(rop, OP);
assert(mpf_get_ui(rop) = OP);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_get_ui_test;
const OP = 1000000;
var rop: mpf_t;
begin
mpf_init(rop);
mpf_set_ui(rop, OP);
assert(mpf_get_ui(rop) = OP);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_set_si_test;
const OP = -1000000;
var rop: mpf_t;
begin
mpf_init(rop);
mpf_set_si(rop, OP);
assert(mpf_get_si(rop) = OP);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_get_si_test;
const OP = -1000000;
var rop: mpf_t;
begin
mpf_init(rop);
mpf_set_si(rop, OP);
assert(mpf_get_si(rop) = OP);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_set_test;
const N = -1000000;
var rop, op: mpf_t;
begin
mpf_init(rop);
mpf_init_set_si(op, N);
mpf_set(rop, op);
assert(mpf_get_si(rop) = N);
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_set_str_test;
const N = -123;
var rop: mpf_t;
begin
mpf_init(rop);
assert(mpf_set_str(rop, pchar(inttostr(N)), BASE10) = 0);
assert(mpf_get_si(rop) = N);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_swap_test;
const
ROP_1 = -13;
ROP_2 = -23;
var rop1, rop2: mpf_t;
begin
mpf_init_set_si(rop1, ROP_1);
mpf_init_set_si(rop2, ROP_2);
mpf_swap(rop1, rop2);
assert(mpf_get_si(rop1) = ROP_2);
assert(mpf_get_si(rop2) = ROP_1);
mpf_clear(rop1);
mpf_clear(rop2);
end;
procedure TTestGmpBinding.mpf_get_d_test;
const N = -1.5;
var rop: mpf_t;
begin
mpf_init_set_d(rop, N);
assert(mpf_get_d(rop) = N);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_set_d_test;
const N = -1.5;
var rop: mpf_t;
begin
mpf_init(rop);
mpf_set_d(rop, N);
assert(mpf_get_d(rop) = N);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_setmpz_test;
const
OP_1 = -13;
var
rop: mpf_t;
op: mpz_t;
begin
mpf_init(rop);
mpz_init_set_si(op, OP_1);
mpf_set_z(rop, op);
assert(mpf_get_si(rop) = OP_1);
mpf_clear(rop);
mpz_clear(op);
end;
procedure TTestGmpBinding.mpf_get_d_2exp_test;
const
M = 0.5;
E = 4;
N = (1 shl E) div 2;
var
rop: mpf_t;
exp: valsint;
begin
mpf_init_set_d(rop, N);
exp := -1;
assert(mpf_get_d_2exp(exp, rop) = M);
assert(exp = E);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_get_str_test;
const
N = 3.1416;
S = '31416';
E = 1;
var
op: mpf_t;
p: pchar;
exp: mp_exp_t;
begin
mpf_init_set_d(op, N);
p := mpf_get_str(nil, exp, BASE10, length(S), op);
assert(p = S);
assert(exp = E);
freemem(p);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_add_test;
const
OP1_ = 1;
OP2_ = 2;
var rop, op1, op2: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_init_set_d(op2, OP2_);
mpf_add(rop, op1, op2);
assert(mpf_get_d(rop) = OP1_ + OP2_);
mpf_clear(rop);
mpf_clear(op1);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_add_ui_test;
const
OP1_ = 1;
OP2_ = 2;
var rop, op1: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_add_ui(rop, op1, OP2_);
assert(mpf_get_d(rop) = OP1_ + OP2_);
mpf_clear(rop);
mpf_clear(op1);
end;
procedure TTestGmpBinding.mpf_sub_test;
const
OP1_ = 3;
OP2_ = 1;
var rop, op1, op2: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_init_set_d(op2, OP2_);
mpf_sub(rop, op1, op2);
assert(mpf_get_d(rop) = OP1_ - OP2_);
mpf_clear(rop);
mpf_clear(op1);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_sub_ui_test;
const
OP1_ = 3;
OP2_ = 1;
var rop, op1: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_sub_ui(rop, op1, OP2_);
assert(mpf_get_d(rop) = OP1_ - OP2_);
mpf_clear(rop);
mpf_clear(op1);
end;
procedure TTestGmpBinding.mpf_ui_sub_test;
const
OP1_ = 3;
OP2_ = 1;
var rop, op2: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op2, OP2_);
mpf_ui_sub(rop, OP1_, op2);
assert(mpf_get_d(rop) = OP1_ - OP2_);
mpf_clear(rop);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_mul_test;
const
OP1_ = 2;
OP2_ = 3;
var rop, op1, op2: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_init_set_d(op2, OP2_);
mpf_mul(rop, op1, op2);
assert(mpf_get_d(rop) = OP1_ * OP2_);
mpf_clear(rop);
mpf_clear(op1);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_mul_ui_test;
const
OP1_ = 2;
OP2_ = 3;
var rop, op1: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_mul_ui(rop, op1, OP2_);
assert(mpf_get_d(rop) = OP1_ * OP2_);
mpf_clear(rop);
mpf_clear(op1);
end;
procedure TTestGmpBinding.mpf_mul_2exp_test;
const
OP1_ = 3;
OP2_ = 4;
var rop, op1: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_mul_2exp(rop, op1, OP2_);
assert(mpf_get_d(rop) = OP1_ * (1 shl OP2_));
mpf_clear(rop);
mpf_clear(op1);
end;
procedure TTestGmpBinding.mpf_div_test;
const
OP1_ = 6;
OP2_ = 2;
var rop, op1, op2: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_init_set_d(op2, OP2_);
mpf_div(rop, op1, op2);
assert(mpf_get_d(rop) = OP1_ / OP2_);
mpf_clear(rop);
mpf_clear(op1);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_div_ui_test;
const
OP1_ = 6;
OP2_ = 2;
var rop, op1: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_div_ui(rop, op1, OP2_);
assert(mpf_get_d(rop) = OP1_ / OP2_);
mpf_clear(rop);
mpf_clear(op1);
end;
procedure TTestGmpBinding.mpf_ui_div_test;
const
OP1_ = 6;
OP2_ = 2;
var rop, op2: mpf_t;
begin
mpf_init(rop);
mpf_init_set_si(op2, OP2_);
mpf_ui_div(rop, OP1_, op2);
assert(mpf_get_d(rop) = OP1_ / OP2_);
mpf_clear(rop);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_div_2exp_test;
const
OP1_ = 16;
OP2_ = 2;
var rop, op1: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_div_2exp(rop, op1, OP2_);
assert(mpf_get_d(rop) = OP1_ / (1 shl OP2_));
mpf_clear(rop);
mpf_clear(op1);
end;
procedure TTestGmpBinding.mpf_sqrt_test;
const
OP_ = 4;
var rop, op: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op, OP_);
mpf_sqrt(rop, op);
assert(mpf_get_d(rop) = sqrt(OP_));
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_sqrt_ui_test;
const
OP_ = 4;
var rop: mpf_t;
begin
mpf_init(rop);
mpf_sqrt_ui(rop, OP_);
assert(mpf_get_d(rop) = sqrt(OP_));
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_pow_ui_test;
const
OP1_ = 3;
OP2_ = 2;
var rop, op1: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_pow_ui(rop, op1, OP2_);
assert(mpf_get_d(rop) = OP1_ ** OP2_);
mpf_clear(rop);
mpf_clear(op1);
end;
procedure TTestGmpBinding.mpf_neg_test;
const
OP_ = 4;
var rop, op: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op, OP_);
mpf_neg(rop, op);
assert(mpf_get_d(rop) = -OP_);
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_abs_test;
const OP_ = -4;
var rop, op: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op, OP_);
mpf_abs(rop, op);
assert(mpf_get_d(rop) = -OP_);
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_cmp_test;
const OP_1 = -10;
var op1, op2: mpf_t;
begin
mpf_init_set_si(op1, OP_1);
mpf_init_set_si(op2, OP_1);
assert(mpf_cmp(op1, op2) = 0);
mpf_set_si(op2, OP_1 + 1);
assert(mpf_cmp(op1, op2) < 0);
mpf_set_si(op2, OP_1 - 1);
assert(mpf_cmp(op1, op2) > 0);
mpf_clear(op1);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_cmp_d_test;
const OP_ = -10;
var op: mpf_t;
begin
mpf_init_set_si(op, OP_);
assert(mpf_cmp_d(op, OP_) = 0);
assert(mpf_cmp_d(op, OP_ + 1) < 0);
assert(mpf_cmp_d(op, OP_ - 1) > 0);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_cmp_si_test;
const OP_ = -10;
var op: mpf_t;
begin
mpf_init_set_si(op, OP_);
assert(mpf_cmp_si(op, OP_) = 0);
assert(mpf_cmp_si(op, OP_ + 1) < 0);
assert(mpf_cmp_si(op, OP_ - 1) > 0);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_cmp_ui_test;
const OP_ = 10;
var op: mpf_t;
begin
mpf_init_set_si(op, OP_);
assert(mpf_cmp_ui(op, OP_) = 0);
assert(mpf_cmp_ui(op, OP_ + 1) < 0);
assert(mpf_cmp_ui(op, OP_ - 1) > 0);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_eq_test;
const
OP_1 = 10;
OP_3 = 8;
var op1, op2: mpf_t;
begin
mpf_init_set_si(op1, OP_1);
mpf_init_set_si(op2, OP_1);
assert(mpf_eq(op1, op2, OP_3) <> 0);
mpf_clear(op1);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_reldiff_test;
const
OP1_ = 4;
OP2_ = 2;
var rop, op1, op2: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op1, OP1_);
mpf_init_set_d(op2, OP2_);
mpf_reldiff(rop, op1, op2);
assert(mpf_get_d(rop) = abs(OP1_ - OP2_) / OP1_);
mpf_clear(rop);
mpf_clear(op1);
mpf_clear(op2);
end;
procedure TTestGmpBinding.mpf_ceil_test;
const N = 3.1;
var rop, op: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op, N);
mpf_ceil(rop, op);
assert(mpf_get_d(rop) = ceil(N));
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_floor_test;
const N = 3.9;
var rop, op: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op, N);
mpf_floor(rop, op);
assert(mpf_get_d(rop) = floor(N));
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_trunc_test;
const N = -3.9;
var rop, op: mpf_t;
begin
mpf_init(rop);
mpf_init_set_d(op, N);
mpf_trunc(rop, op);
assert(mpf_get_d(rop) = trunc(N));
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_integer_p_test;
const
N1 = 10;
N2 = 10.1;
var op: mpf_t;
begin
mpf_init_set_si(op, N1);
assert(longbool(mpf_integer_p(op)));
mpf_set_d(op, N2);
assert(not longbool(mpf_integer_p(op)));
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_fits_ushort_p_test;
var op: mpf_t;
begin
mpf_init_set_ui(op, high(word));
assert(longbool(mpf_fits_ushort_p(op)));
mpf_add_ui(op, op, 1);
assert(not longbool(mpf_fits_ushort_p(op)));
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_fits_sshort_p_test;
var op: mpf_t;
begin
mpf_init_set_ui(op, high(smallint));
assert(longbool(mpf_fits_sshort_p(op)));
mpf_add_ui(op, op, 1);
assert(not longbool(mpf_fits_sshort_p(op)));
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_fits_uint_p_test;
var op: mpf_t;
begin
mpf_init_set_ui(op, high(cardinal));
assert(longbool(mpf_fits_uint_p(op)));
mpf_add_ui(op, op, 1);
assert(not longbool(mpf_fits_uint_p(op)));
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_fits_sint_p_test;
var op: mpf_t;
begin
mpf_init_set_ui(op, high(integer));
assert(longbool(mpf_fits_sint_p(op)));
mpf_add_ui(op, op, 1);
assert(not longbool(mpf_fits_sint_p(op)));
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_fits_ulong_p_test;
var op: mpf_t;
begin
mpf_init_set_ui(op, high(valuint));
assert(longbool(mpf_fits_ulong_p(op)));
mpf_add_ui(op, op, 1);
assert(not longbool(mpf_fits_ulong_p(op)));
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_fits_slong_p_test;
var op: mpf_t;
begin
mpf_init_set_ui(op, high(valsint));
assert(longbool(mpf_fits_slong_p(op)));
mpf_add_ui(op, op, 1);
assert(not longbool(mpf_fits_slong_p(op)));
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_urandomb_test;
const NBITS = 100;
var
rop: mpf_t;
state: randstate_t;
cmp: longint;
begin
mp_randinit_default(state);
mpf_init(rop);
mpf_urandomb(rop, state, NBITS);
cmp := mpf_cmp_ui(rop, 0);
assert(cmp >= 0);
assert(mpf_cmp_ui(rop, 1) < 0);
mpf_clear(rop);
mp_randclear(state);
end;
procedure TTestGmpBinding.mpf_random2_test;
var
rop: mpf_t;
begin
mpf_init(rop);
mpf_random2(rop, 1, 1);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_init_set_test;
const N = -1000000;
var rop, op: mpf_t;
begin
mpf_init_set_si(op, N);
mpf_init_set(rop, op);
assert(mpf_get_si(rop) = N);
mpf_clear(rop);
mpf_clear(op);
end;
procedure TTestGmpBinding.mpf_init_set_d_test;
const N = -1.5;
var rop: mpf_t;
begin
mpf_init_set_d(rop, N);
assert(mpf_get_d(rop) = N);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_init_set_si_test;
const N = -5;
var rop: mpf_t;
begin
mpf_init_set_si(rop, N);
assert(mpf_get_si(rop) = N);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_init_set_str_test;
const N = -123;
var rop: mpf_t;
begin
mpf_init_set_str(rop, pchar(inttostr(N)), BASE10);
assert(mpf_get_si(rop) = N);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpf_init_set_ui_test;
const N = 5;
var rop: mpf_t;
begin
mpf_init_set_ui(rop, N);
assert(mpf_get_ui(rop) = N);
mpf_clear(rop);
end;
procedure TTestGmpBinding.mpn_add_n_test;
var
rop, s1, s2: mp_limb_t;
begin
s1 := high(mp_limb_t);
s2 := s1;
rop := 2;
assert(mpn_add_n(@rop, @s1, @s2, 1) = 1);
assert(rop = high(mp_limb_t) - 1);
end;
procedure TTestGmpBinding.mpn_add_1_test;
var
rop, s1: mp_limb_t;
begin
s1 := high(mp_limb_t);
rop := 2;
assert(mpn_add_1(@rop, @s1, 1, high(mp_limb_t)) = 1);
assert(rop = high(mp_limb_t) - 1);
end;
procedure TTestGmpBinding.mpn_add_test;
var
rop, s1, s2: mp_limb_t;
begin
s1 := high(mp_limb_t);
s2 := s1;
rop := 2;
assert(mpn_add(@rop, @s1, 1, @s2, 1) = 1);
assert(rop = high(mp_limb_t) - 1);
end;
procedure TTestGmpBinding.mpn_sub_n_test;
var
rop, s1, s2: mp_limb_t;
begin
s1 := 0;
s2 := high(mp_limb_t);
rop := 2;
assert(mpn_sub_n(@rop, @s1, @s2, 1) = 1);
assert(rop = 1);
end;
procedure TTestGmpBinding.mpn_sub_1_test;
var
rop, s1: mp_limb_t;
begin
s1 := 0;
rop := 2;
assert(mpn_sub_1(@rop, @s1, 1, high(mp_limb_t)) = 1);
assert(rop = 1);
end;
procedure TTestGmpBinding.mpn_sub_test;
var
rop, s1, s2: mp_limb_t;
begin
s1 := 0;
s2 := high(mp_limb_t);
rop := 2;
assert(mpn_sub(@rop, @s1, 1, @s2, 1) = 1);
assert(rop = 1);
end;
procedure TTestGmpBinding.mpn_mul_n_test;
var
rop: array[0..1] of mp_limb_t;
s1, s2: mp_limb_t;
begin
s1 := high(mp_limb_t);
s2 := s1;
mpn_mul_n(@rop, @s1, @s2, 1);
assert(rop[0] = 1);
assert(rop[1] = high(mp_limb_t) - 1);
end;
procedure TTestGmpBinding.mpn_mul_1_test;
var
rop: array[0..1] of mp_limb_t;
s1: mp_limb_t;
begin
s1 := high(mp_limb_t);
assert(mpn_mul_1(@rop, @s1, 1, high(mp_limb_t)) = high(mp_limb_t) - 1);
assert(rop[0] = 1);
end;
procedure TTestGmpBinding.mpn_mul_test;
var
rop: array[0..1] of mp_limb_t;
s1, s2: mp_limb_t;
begin
s1 := high(mp_limb_t);
s2 := s1;
assert(mpn_mul(@rop, @s1, 1, @s2, 1) = high(mp_limb_t) - 1);
assert(rop[0] = 1);
assert(rop[1] = high(mp_limb_t) - 1);
end;
procedure TTestGmpBinding.mpn_addmul_1_test;
var
rop: array[0..1] of mp_limb_t;
s1: mp_limb_t;
begin
rop[0] := 1;
rop[1] := 0;
s1 := high(mp_limb_t);
assert(mpn_addmul_1(@rop, @s1, 1, high(mp_limb_t)) = high(mp_limb_t) - 1);
assert(rop[0] = 2);
end;
procedure TTestGmpBinding.mpn_submul_1_test;
var
rop: array[0..1] of mp_limb_t;
s1: mp_limb_t;
begin
rop[0] := 1;
rop[1] := 0;
s1 := high(mp_limb_t);
assert(mpn_submul_1(@rop, @s1, 1, high(mp_limb_t)) = high(mp_limb_t) - 1);
assert(rop[0] = 0);
end;
procedure TTestGmpBinding.mpn_tdiv_qr_test;
const
N_ = 19;
D_ = 4;
var
q, r: array[0..1] of mp_limb_t;
n, d: mp_limb_t;
begin
n := N_;
d := D_;
q[0] := 0;
q[1] := 0;
r[0] := 0;
r[1] := 0;
mpn_tdiv_qr(@q, @r, 0, @n, 1, @d, 1);
assert(q[0] = N_ div D_);
assert(r[0] = N_ mod D_);
end;
procedure TTestGmpBinding.mpn_divrem_1_test;
const
N_ = 19;
D_ = 4;
var r1, s2: mp_limb_t;
begin
r1 := 0;
s2 := N_;
assert(mpn_divrem_1(@r1, 0, @s2, 1, D_) = N_ mod D_);
assert(r1 = N_ div D_);
end;
procedure TTestGmpBinding.mpn_divexact_by3c_test;
const
K = 3;
N_ = 17;
var r, s: mp_limb_t;
begin
r := 0;
s := K * N_;
assert(mpn_divexact_by3c(@r, @s, 1, 0) = 0);
assert(r = N_);
s := K * N_ + 1;
assert(mpn_divexact_by3c(@r, @s, 1, 0) <> 0);
end;
procedure TTestGmpBinding.mpn_mod_1_test;
const
N_ = 19;
D_ = 4;
var s1: mp_limb_t;
begin
s1 := N_;
assert(mpn_mod_1(@s1, 1, D_) = N_ mod D_);
end;
procedure TTestGmpBinding.mpn_lshift_test;
var r, s: mp_limb_t;
begin
r := 0;
s := high(mp_limb_t);
assert(mpn_lshift(@r, @s, 1, 1) = 1);
assert(r = high(mp_limb_t) - 1);
end;
procedure TTestGmpBinding.mpn_rshift_test;
var r, s: mp_limb_t;
begin
r := 0;
s := high(mp_limb_t);
assert(mpn_rshift(@r, @s, 1, 1) = valuint(1) shl (bits_per_limb - 1));
assert(r = high(mp_limb_t) shr 1);
end;
procedure TTestGmpBinding.mpn_cmp_test;
const S1_ = 10;
var s1, s2: mp_limb_t;
begin
s1 := S1_;
S2 := S1_;
assert(mpn_cmp(@s1, @s2, 1) = 0);
S2 := S1_ - 1;
assert(mpn_cmp(@s1, @s2, 1) > 0);
S2 := S1_ + 1;
assert(mpn_cmp(@s1, @s2, 1) < 0);
end;
procedure TTestGmpBinding.mpn_gcd_test;
const
S1_ = 30;
S2_ = 105;
RP_ = 15;
var r, s1, s2: mp_limb_t;
begin
s1 := S1_;
s2 := S2_;
r := 0;
assert(mpn_gcd(@r, @s1, 1, @s2, 1) = 1);
assert(r = RP_);
end;
procedure TTestGmpBinding.mpn_gcd_1_test;
const
S1_ = 30;
S2_ = 105;
R_ = 15;
var s1: mp_limb_t;
begin
s1 := S1_;
assert(mpn_gcd_1(@s1, 1, S2_) = R_);
end;
procedure TTestGmpBinding.mpn_gcdext_test;
const
S1_ = 3 * 5;
S2_ = 2 * 3;
R1_ = 3;
var
r1, r2, s1, s2: array[0..1] of mp_limb_t;
r2n: mp_size_t;
k: valsint;
begin
s1[0] := S1_;
s1[1] := 0;
s2[0] := S2_;
s2[1] := 0;
assert(mpn_gcdext(@r1, @r2, r2n, @s1, 1, @s2, 1) = 1);
assert(r2n = 1);
assert(r1[0] = R1_);
k := (valsint(r1[0]) - valsint(r2[0]) * valsint(s1[0])) div valsint(s2[0]);
assert(valsint(r1[0]) = valsint(r2[0]) * valsint(s1[0]) + k * valsint(s2[0]));
end;
procedure TTestGmpBinding.mpn_sqrtrem_test;
const
ROOT = 3;
var r1, r2, s: mp_limb_t;
begin
s := ROOT ** 2 + ROOT - 1;
assert(mpn_sqrtrem(@r1, @r2, @s, 1) = 1);
assert(r1 = ROOT);
assert(r2 = ROOT - 1);
end;
procedure TTestGmpBinding.mpn_get_str_test;
const N = uint64($FEDCBA9876543210);
var
str: array[0..2 * sizeof(mp_limb_t)] of byte;
s1: mp_limb_t;
i: integer;
begin
s1 := N and (high(mp_limb_t) - 1);
assert(mpn_get_str(@str, BASE16, @s1, 1) = high(str));
for i := 0 to high(str) - 1 do
assert(str[i] = high(str) - i - 1);
end;
procedure TTestGmpBinding.mpn_set_str_test;
const N = uint64($FEDCBA9876543210);
var
r: mp_limb_t;
str: array[0..2 * sizeof(mp_limb_t)] of byte;
i: integer;
begin
for i := 0 to high(str) - 1 do
str[i] := high(str) - i - 1;
assert(mpn_set_str(@r, @str, high(str), BASE16) = 1);
assert(r = N and (high(mp_limb_t) - 1));
end;
procedure TTestGmpBinding.mpn_scan0_test;
const
S1_ = $F75;
STARTING_BIT = 4;
N = 7;
var s1: mp_limb_t;
begin
s1 := S1_;
assert(mpn_scan0(@s1, STARTING_BIT) = N);
end;
procedure TTestGmpBinding.mpn_scan1_test;
const
S1_ = $85;
STARTING_BIT = 4;
N = 7;
var s1: mp_limb_t;
begin
s1 := S1_;
assert(mpn_scan1(@s1, STARTING_BIT) = N);
end;
procedure TTestGmpBinding.mpn_popcount_test;
const
S1_ = $55AA;
N = 8;
var s1: mp_limb_t;
begin
s1 := S1_;
assert(mpn_popcount(@s1, 1) = N);
end;
procedure TTestGmpBinding.mpn_hamdist_test;
const
S1_ = $55;
S2_ = $7A;
N = 5;
var s1, s2: mp_limb_t;
begin
s1 := S1_;
s2 := S2_;
assert(mpn_hamdist(@s1, @s2, 1) = N);
end;
procedure TTestGmpBinding.mpn_perfect_square_p_test;
const ROOT = 3;
var s1: mp_limb_t;
begin
s1 := ROOT ** 2;
assert(mpn_perfect_square_p(@s1, 1) <> 0);
s1 := s1 or 2;
assert(mpn_perfect_square_p(@s1, 1) = 0);
end;
procedure TTestGmpBinding.mpn_random_test;
var r1: array[0..2] of mp_limb_t;
begin
mpn_random(@r1, high(r1) + 1);
assert((r1[2] <> 0) and ((r1[0] <> r1[1]) or (r1[0] <> r1[2]) or (r1[1] <> r1[2])));
end;
procedure TTestGmpBinding.mpn_random2_test;
var r1: array[0..2] of mp_limb_t;
begin
mpn_random2(@r1, high(r1) + 1);
assert((r1[2] <> 0) and ((r1[0] <> r1[1]) or (r1[0] <> r1[2]) or (r1[1] <> r1[2])));
end;
procedure TTestGmpBinding.bits_per_limb_test;
begin
assert(bits_per_limb = 8 * sizeof(mp_limb_t));
end;
procedure TTestGmpBinding.version_test;
function isvernum(s: string; first, last: integer): boolean;
var i: integer;
begin
i := strtointdef(copy(s, first, last - first + 1), -1);
result := i >= 0;
end;
const DOT = '.';
var
v: string;
dot1, dot2: integer;
begin
v := version;
dot1 := pos(DOT, v);
assert(dot1 <> 0);
dot2 := posex(DOT, v, dot1 + 1);
assert(dot2 <> 0);
assert(isvernum(v, 1, dot1 - 1));
assert(isvernum(v, dot1 + 1, dot2 - 1));
assert(isvernum(v, dot2 + 1, length(v)));
end;
{ TTestGmpExtensions }
procedure TTestGmpExtensions.randinit_default_test;
var state: MPRandState;
begin
randinit_default(state);
assert(rnd_test(state.Ptr^));
end;
procedure TTestGmpExtensions.randinit_mt_test;
var state: MPRandState;
begin
randinit_mt(state);
assert(rnd_test(state.Ptr^));
end;
procedure TTestGmpExtensions.randinit_lc_2exp_test;
const
A_ = 3;
C = 5;
M2EXP = 8;
var
state: MPRandState;
a: MPInteger;
begin
z_init_set_ui(a, A_);
randinit_lc_2exp(state, a, C, M2EXP);
assert(rnd_test(state.Ptr^));
end;
procedure TTestGmpExtensions.randinit_lc_2exp_size_test;
var state: MPRandState;
begin
assert(randinit_lc_2exp_size(state, 0));
assert(rnd_test(state.Ptr^));
end;
procedure TTestGmpExtensions.randinit_set_test;
var rop, op: MPRandState;
begin
randinit_default(op);
randinit_set(rop, op);
assert(rnd_test(rop.Ptr^));
end;
procedure TTestGmpExtensions.randclear_test;
var state: MPRandState;
begin
randinit_default(state);
randclear(state);
end;
procedure TTestGmpExtensions.randseed_test;
var
state: MPRandState;
seed: MPInteger;
begin
randinit_default(state);
z_init_set_ui(seed, 0);
randseed(state, seed);
end;
procedure TTestGmpExtensions.randseed_ui_test;
var state: MPRandState;
begin
randinit_default(state);
randseed_ui(state, 0);
end;
procedure TTestGmpExtensions.urandomb_ui_test;
const
B = 8 * (sizeof(valuint) - 1);
N = 1 shl B;
var
state: MPRandState;
r1, r2, r3: valuint;
begin
randinit_default(state);
r1 := urandomb_ui(state, B);
r2 := urandomb_ui(state, B);
r3 := urandomb_ui(state, B);
assert((r1 < N) and (r2 < N) and (r3 < N) and ((r1 <> r2) or (r1 <> r3) or (r2 <> r3)));
end;
procedure TTestGmpExtensions.urandomm_ui_test;
const N = high(valuint);
var
state: MPRandState;
r1, r2, r3: valuint;
begin
randinit_default(state);
r1 := urandomm_ui(state, N);
r2 := urandomm_ui(state, N);
r3 := urandomm_ui(state, N);
assert((r1 < N) and (r2 < N) and (r3 < N) and ((r1 <> r2) or (r1 <> r3) or (r2 <> r3)));
end;
//procedure TTestGmpExtensions.asprintf_test;
//const
// N = 123456;
// S = '123456';
//var
// z: MPInteger;
// p: pchar;
//begin
// z_init_set_ui(z, N);
// assert(asprintf(p, Z_FMT, [@z]) = length(S));
// assert(p = S);
// freemem(p);
// z_clear(z);
//end;
//
//procedure TTestGmpExtensions.asprintf_test2;
//const
// N = 123456;
// S = '123456';
//var
// z: MPInteger;
// p: pchar;
//begin
// z_init_set_ui(z, N);
// assert(asprintf(p, Z_FMT, @z) = length(S));
// assert(p = S);
// freemem(p);
// z_clear(z);
//end;
//
//procedure TTestGmpExtensions.snprintf_test;
//const
// N = 123456;
// S = '123456';
//var
// z: MPInteger;
// buf: pchar;
//begin
// z_init_set_ui(z, N);
// getmem(buf, length(S) + 1);
// assert(snprintf(buf, length(S) + 1, Z_FMT, [@z]) = length(S));
// assert(buf = S);
// freemem(buf);
// z_clear(z);
//end;
//
//procedure TTestGmpExtensions.snprintf_test2;
//const
// N = 123456;
// S = '123456';
//var
// z: MPInteger;
// buf: pchar;
//begin
// z_init_set_ui(z, N);
// getmem(buf, length(S) + 1);
// assert(snprintf(buf, length(S) + 1, Z_FMT, @z) = length(S));
// assert(buf = S);
// freemem(buf);
// z_clear(z);
//end;
//
//procedure TTestGmpExtensions.sprintf_test;
//const
// N = 123456;
// S = '123456';
//var
// z: MPInteger;
// buf: pchar;
//begin
// z_init_set_ui(z, N);
// getmem(buf, length(S) + 1);
// assert(sprintf(buf, Z_FMT, [@z]) = length(S));
// assert(buf = S);
// freemem(buf);
// z_clear(z);
//end;
//
//procedure TTestGmpExtensions.sprintf_test2;
//const
// N = 123456;
// S = '123456';
//var
// z: MPInteger;
// buf: pchar;
//begin
// z_init_set_ui(z, N);
// getmem(buf, length(S) + 1);
// assert(sprintf(buf, Z_FMT, @z) = length(S));
// assert(buf = S);
// freemem(buf);
// z_clear(z);
//end;
//
//procedure TTestGmpExtensions.sscanf_test;
//const
// N = 3;
// D = 2;
//var q: mpq_t;
//begin
// q_init(q);
// assert(sscanf(pchar(inttostr(N) + '/' + inttostr(D)), Q_FMT, [@q]) = 1);
// assert(q_cmp_ui(q, N, D) = 0);
// q_clear(q);
//end;
//
//procedure TTestGmpExtensions.sscanf_test2;
//const
// N = 3;
// D = 2;
//var q: mpq_t;
//begin
// q_init(q);
// assert(sscanf(pchar(inttostr(N) + '/' + inttostr(D)), Q_FMT, @q) = 1);
// assert(q_cmp_ui(q, N, D) = 0);
// q_clear(q);
//end;
procedure TTestGmpExtensions.z_init_test;
var integer_: MPInteger;
begin
z_init(integer_);
assert(z_get_si(integer_) = 0);
end;
procedure TTestGmpExtensions.z_clear_test;
const N = 1000000;
var integer_: MPInteger;
begin
z_init2(integer_, N);
z_clear(integer_);
assert(z_get_si(integer_) = 0);
end;
procedure TTestGmpExtensions.z_init2_test;
const N = 1000000;
var integer_: MPInteger;
begin
z_init2(integer_, N);
assert(z_get_si(integer_) = 0);
end;
procedure TTestGmpExtensions.z_init_set_si_test;
const N = -1000000;
var rop: MPInteger;
begin
z_init_set_si(rop, N);
assert(z_get_si(rop) = N);
end;
procedure TTestGmpExtensions.z_init_set_ui_test;
const N = 1000000;
var rop: MPInteger;
begin
z_init_set_ui(rop, N);
assert(z_get_ui(rop) = N);
end;
procedure TTestGmpExtensions.z_init_set_d_test;
const N = -1000000;
var rop: MPInteger;
begin
z_init_set_d(rop, N);
assert(z_get_si(rop) = N);
end;
procedure TTestGmpExtensions.z_init_set_test;
const N = -1000000;
var rop, op: MPInteger;
begin
z_init_set_si(op, N);
z_init_set(rop, op);
assert(z_get_si(rop) = N);
end;
procedure TTestGmpExtensions.z_init_set_str_test;
const N = 1000000;
var rop: MPInteger;
begin
assert(z_init_set_str(rop, IntToStr(N), BASE10));
assert(z_get_si(rop) = N);
end;
procedure TTestGmpExtensions.z_realloc_test;
const N = 1000;
var integer_: MPInteger;
begin
z_init(integer_);
z_realloc(integer_, N);
end;
procedure TTestGmpExtensions.z_realloc2_test;
const N = 1000;
var integer_: MPInteger;
begin
z_init(integer_);
z_realloc2(integer_, N);
end;
procedure TTestGmpExtensions.z_getlimbn_test;
const N = 1234;
var op: MPInteger;
begin
z_init_set_ui(op, N);
assert(z_getlimbn(op, 0) = N);
end;
procedure TTestGmpExtensions.z_export_test;
type t = word;
const
N = 1000000;
BUF_HIGH = sizeof(N) div sizeof(t);
var
export_op, import_op: MPInteger;
buf: array[0..BUF_HIGH] of t;
count: sizeuint;
begin
z_init_set_si(export_op, N);
z_init(import_op);
z_export(buf, count, -1, sizeof(t), 0, 0, export_op);
z_import(import_op, count, -1, sizeof(t), 0, 0, buf);
assert(z_get_si(export_op) = z_get_si(import_op));
end;
procedure TTestGmpExtensions.z_import_test;
type t = word;
const
N = 1000000;
BUF_HIGH = sizeof(N) div sizeof(t);
var
export_op, import_op: MPInteger;
buf: array[0..BUF_HIGH] of t;
count: sizeuint;
begin
z_init_set_si(export_op, N);
z_init(import_op);
z_export(buf, count, -1, sizeof(t), 0, 0, export_op);
z_import(import_op, count, -1, sizeof(t), 0, 0, buf);
assert(z_get_si(export_op) = z_get_si(import_op));
end;
procedure TTestGmpExtensions.z_swap_test;
const
ROP_1 = -1000;
ROP_2 = 1000000;
var rop1, rop2: MPInteger;
begin
z_init_set_si(rop1, ROP_1);
z_init_set_si(rop2, ROP_2);
z_swap(rop1, rop2);
assert(z_get_si(rop1) = ROP_2);
assert(z_get_si(rop2) = ROP_1);
end;
procedure TTestGmpExtensions.z_set_test;
const OP_ = 1000000;
var rop, op: MPInteger;
begin
z_init(rop);
z_init_set_si(op, OP_);
z_set(rop, op);
assert(z_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.z_set_d_test;
const OP_ = 1000000;
var rop: MPInteger;
begin
z_init(rop);
z_set_d(rop, OP_);
assert(z_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.z_set_f_test;
const OP_ = -10;
var
op: MPFloat;
rop: MPInteger;
begin
f_init_set_si(op, OP_);
z_init(rop);
z_set_f(rop, op);
assert(z_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.z_set_q_test;
const OP_ = -10;
var
op: MPRational;
rop: MPInteger;
begin
q_init(op);
z_init(rop);
q_set_si(op, OP_, 1);
z_set_q(rop, op);
assert(z_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.z_set_si_test;
const OP_ = -1000000;
var rop: MPInteger;
begin
z_init(rop);
z_set_si(rop, OP_);
assert(z_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.z_set_str_test;
const OP_ = -1000000;
var rop: MPInteger;
begin
z_init(rop);
assert(z_set_str(rop, IntToStr(OP_), BASE10));
assert(z_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.z_set_ui_test;
const OP_ = 1000000;
var rop: MPInteger;
begin
z_init(rop);
z_set_ui(rop, OP_);
assert(z_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.z_get_d_test;
const N = -1000;
var op: MPInteger;
begin
z_init_set_si(op, N);
assert(z_get_d(op) = N);
end;
procedure TTestGmpExtensions.z_get_d_2exp_test;
const
N_LG2 = 4;
N = 1 shl N_LG2;
var
op: MPInteger;
exp: mp_exp_t;
begin
z_init_set_si(op, N);
assert(z_get_d_2exp(exp, op) = 1 / 2);
assert(exp = N_LG2 + 1);
end;
procedure TTestGmpExtensions.z_get_si_test;
const N = -1000000;
var op: MPInteger;
begin
z_init_set_si(op, N);
assert(z_get_si(op) = N);
end;
procedure TTestGmpExtensions.z_get_str_test;
const N = -1000000;
var
op: MPInteger;
p: pchar;
s, s0, s1: String;
begin
z_init_set_si(op, N);
s0 := inttostr(N);
s := z_get_str(BASE10, op);
assert(s = s0);
p := z_get_str(nil, BASE10, op);
assert(p = s0);
freemem(p);
setlength(s1, length(s0));
assert(pointer(z_get_str(pchar(s1), BASE10, op)) = pointer(s1));
assert(s1 = s0);
end;
procedure TTestGmpExtensions.z_get_ui_test;
const N = 1000000;
var op: MPInteger;
begin
z_init_set_ui(op, N);
assert(z_get_ui(op) = N);
end;
procedure TTestGmpExtensions.z_add_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, op2, sum: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_add(rop, op1, op2);
assert(z_get_si(rop) = OP_1 + OP_2);
sum := z_add(op1, op2);
assert(z_get_si(sum) = OP_1 + OP_2);
end;
procedure TTestGmpExtensions.z_add_ui_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, sum: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_add_ui(rop, op1, OP_2);
assert(z_get_si(rop) = OP_1 + OP_2);
sum := z_add_ui(op1, OP_2);
assert(z_get_si(sum) = OP_1 + OP_2);
end;
procedure TTestGmpExtensions.z_sub_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, op2, diff: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_sub(rop, op1, op2);
assert(z_get_si(rop) = OP_1 - OP_2);
diff := z_sub(op1, op2);
assert(z_get_si(diff) = OP_1 - OP_2);
end;
procedure TTestGmpExtensions.z_sub_ui_test;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, diff: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_sub_ui(rop, op1, OP_2);
assert(z_get_si(rop) = OP_1 - OP_2);
diff := z_sub_ui(op1, OP_2);
assert(z_get_si(diff) = OP_1 - OP_2);
end;
procedure TTestGmpExtensions.z_ui_sub_test;
const
OP_1 = 1000;
OP_2 = 1000000;
var rop, op2, diff: MPInteger;
begin
z_init(rop);
z_init_set_si(op2, OP_2);
z_ui_sub(rop, OP_1, op2);
assert(z_get_si(rop) = OP_1 - OP_2);
diff := z_ui_sub(OP_1, op2);
assert(z_get_si(diff) = OP_1 - OP_2);
end;
procedure TTestGmpExtensions.z_mul_test;
const
OP_1 = -10;
OP_2 = 1000;
var rop, op1, op2, prod: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_mul(rop, op1, op2);
assert(z_get_si(rop) = OP_1 * OP_2);
prod := z_mul(op1, op2);
assert(z_get_si(prod) = OP_1 * OP_2);
end;
procedure TTestGmpExtensions.z_mul_si_test;
const
OP_1 = 10;
OP_2 = -1000;
var rop, op1, prod: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_mul_si(rop, op1, OP_2);
assert(z_get_si(rop) = OP_1 * OP_2);
prod := z_mul_si(op1, OP_2);
assert(z_get_si(prod) = OP_1 * OP_2);
end;
procedure TTestGmpExtensions.z_mul_ui_test;
const
OP_1 = -10;
OP_2 = 1000;
var rop, op1, prod: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_mul_ui(rop, op1, OP_2);
assert(z_get_si(rop) = OP_1 * OP_2);
prod := z_mul_ui(op1, OP_2);
assert(z_get_si(prod) = OP_1 * OP_2);
end;
procedure TTestGmpExtensions.z_addmul_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1, op2: MPInteger;
begin
z_init_set_si(rop, ROP_);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_addmul(rop, op1, op2);
assert(z_get_si(rop) = ROP_ + OP_1 * OP_2);
end;
procedure TTestGmpExtensions.z_addmul_ui_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1: MPInteger;
begin
z_init_set_si(rop, ROP_);
z_init_set_si(op1, OP_1);
z_addmul_ui(rop, op1, OP_2);
assert(z_get_si(rop) = ROP_ + OP_1 * OP_2);
end;
procedure TTestGmpExtensions.z_submul_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1, op2: MPInteger;
begin
z_init_set_si(rop, ROP_);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_submul(rop, op1, op2);
assert(z_get_si(rop) = ROP_ - OP_1 * OP_2);
end;
procedure TTestGmpExtensions.z_submul_ui_test;
const
ROP_ = 10;
OP_1 = -100;
OP_2 = 1000;
var rop, op1: MPInteger;
begin
z_init_set_si(rop, ROP_);
z_init_set_si(op1, OP_1);
z_submul_ui(rop, op1, OP_2);
assert(z_get_si(rop) = ROP_ - OP_1 * OP_2);
end;
procedure TTestGmpExtensions.z_mul_2exp_test;
const
OP_1 = 10;
OP_2 = 10;
var rop, op1, x: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_mul_2exp(rop, op1, OP_2);
assert(z_get_si(rop) = OP_1 * (1 shl OP_2));
x := z_mul_2exp(op1, OP_2);
assert(z_get_si(x) = OP_1 * (1 shl OP_2));
end;
procedure TTestGmpExtensions.z_neg_test;
const OP_ = 1000;
var rop, op, x: MPInteger;
begin
z_init(rop);
z_init_set_si(op, OP_);
z_neg(rop, op);
assert(z_get_si(rop) = -OP_);
x := z_neg(op);
assert(z_get_si(x) = -OP_);
end;
procedure TTestGmpExtensions.z_abs_test;
const OP_ = -1000;
var rop, op, x: MPInteger;
begin
z_init(rop);
z_init_set_si(op, OP_);
z_abs(rop, op);
assert(z_get_si(rop) = abs(OP_));
x := z_abs(op);
assert(z_get_si(x) = abs(OP_));
end;
procedure TTestGmpExtensions.z_cdiv_q_test;
const
N_ = -17;
D_ = 4;
var q, n, d, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_cdiv_q(q, n, d);
assert(z_get_si(q) = ceil(N_ / D_));
q2 := z_cdiv_q(n, d);
assert(z_get_si(q2) = ceil(N_ / D_));
end;
procedure TTestGmpExtensions.z_fdiv_q_test;
const
N_ = -17;
D_ = 4;
var q, n, d, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_fdiv_q(q, n, d);
assert(z_get_si(q) = floor(N_ / D_));
q2 := z_fdiv_q(n, d);
assert(z_get_si(q2) = floor(N_ / D_));
end;
procedure TTestGmpExtensions.z_tdiv_q_test;
const
N_ = -17;
D_ = 4;
var q, n, d, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_tdiv_q(q, n, d);
assert(z_get_si(q) = trunc(N_ / D_));
q2 := z_tdiv_q(n, d);
assert(z_get_si(q2) = trunc(N_ / D_));
end;
procedure TTestGmpExtensions.z_cdiv_q_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var q, n, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_cdiv_q_2exp(q, n, B_);
assert(z_get_si(q) = ceil(N_ / D_));
q2 := z_cdiv_q_2exp(n, B_);
assert(z_get_si(q2) = ceil(N_ / D_));
end;
procedure TTestGmpExtensions.z_fdiv_q_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var q, n, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_fdiv_q_2exp(q, n, B_);
assert(z_get_si(q) = floor(N_ / D_));
q2 := z_fdiv_q_2exp(n, B_);
assert(z_get_si(q2) = floor(N_ / D_));
end;
procedure TTestGmpExtensions.z_tdiv_q_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var q, n, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_tdiv_q_2exp(q, n, B_);
assert(z_get_si(q) = trunc(N_ / D_));
q2 := z_tdiv_q_2exp(n, B_);
assert(z_get_si(q2) = trunc(N_ / D_));
end;
procedure TTestGmpExtensions.z_cdiv_q_ui_test;
const
N_ = -17;
D_ = 4;
var
q, n: MPInteger;
ur: valuint;
begin
z_init(q);
z_init_set_si(n, N_);
ur := z_cdiv_q_ui(q, n, D_);
assert(z_get_si(q) = ceil(N_ / D_));
assert(ur - abs(N_ - z_get_si(q) * D_) = 0);
end;
procedure TTestGmpExtensions.z_fdiv_q_ui_test;
const
N_ = -17;
D_ = 4;
var
q, n: MPInteger;
ur: valuint;
begin
z_init(q);
z_init_set_si(n, N_);
ur := z_fdiv_q_ui(q, n, D_);
assert(z_get_si(q) = floor(N_ / D_));
assert(ur - abs(N_ - z_get_si(q) * D_) = 0);
end;
procedure TTestGmpExtensions.z_tdiv_q_ui_test;
const
N_ = -17;
D_ = 4;
var
q, n: MPInteger;
ur: valuint;
begin
z_init(q);
z_init_set_si(n, N_);
ur := z_tdiv_q_ui(q, n, D_);
assert(z_get_si(q) = trunc(N_ / D_));
assert(ur - abs(N_ - z_get_si(q) * D_) = 0);
end;
procedure TTestGmpExtensions.z_cdiv_qr_test;
const
N_ = -17;
D_ = 4;
var q, r, n, d: MPInteger;
begin
z_init(q);
z_init(r);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_cdiv_qr(q, r, n, d);
assert(z_get_si(q) = ceil(N_ / D_));
assert(z_get_si(q) * D_ + z_get_si(r) = N_);
end;
procedure TTestGmpExtensions.z_fdiv_qr_test;
const
N_ = -17;
D_ = 4;
var q, r, n, d: MPInteger;
begin
z_init(q);
z_init(r);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_fdiv_qr(q, r, n, d);
assert(z_get_si(q) = floor(N_ / D_));
assert(z_get_si(q) * D_ + z_get_si(r) = N_);
end;
procedure TTestGmpExtensions.z_tdiv_qr_test;
const
N_ = -17;
D_ = 4;
var q, r, n, d: MPInteger;
begin
z_init(q);
z_init(r);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_tdiv_qr(q, r, n, d);
assert(z_get_si(q) = trunc(N_ / D_));
assert(z_get_si(q) * D_ + z_get_si(r) = N_);
end;
procedure TTestGmpExtensions.z_cdiv_qr_ui_test;
const
N_ = -17;
D_ = 4;
var
q, r, n: MPInteger;
ur: valuint;
begin
z_init(q);
z_init(r);
z_init_set_si(n, N_);
ur := z_cdiv_qr_ui(q, r, n, D_);
assert(z_get_si(q) = ceil(N_ / D_));
assert(z_get_si(q) * D_ + z_get_si(r) = N_);
assert(ur - abs(z_get_si(r)) = 0);
end;
procedure TTestGmpExtensions.z_fdiv_qr_ui_test;
const
N_ = -17;
D_ = 4;
var
q, r, n: MPInteger;
ur: valuint;
begin
z_init(q);
z_init(r);
z_init_set_si(n, N_);
ur := z_fdiv_qr_ui(q, r, n, D_);
assert(z_get_si(q) = floor(N_ / D_));
assert(z_get_si(q) * D_ + z_get_si(r) = N_);
assert(ur - abs(z_get_si(r)) = 0);
end;
procedure TTestGmpExtensions.z_tdiv_qr_ui_test;
const
N_ = -17;
D_ = 4;
var
q, r, n: MPInteger;
ur: valuint;
begin
z_init(q);
z_init(r);
z_init_set_si(n, N_);
ur := z_tdiv_qr_ui(q, r, n, D_);
assert(z_get_si(q) = trunc(N_ / D_));
assert(z_get_si(q) * D_ + z_get_si(r) = N_);
assert(ur - abs(z_get_si(r)) = 0);
end;
procedure TTestGmpExtensions.z_cdiv_r_test;
const
N_ = -17;
D_ = 4;
var r, n, d, r2: MPInteger;
begin
z_init(r);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_cdiv_r(r, n, d);
assert(ceil(N_ / D_) * D_ + z_get_si(r) = N_);
r2 := z_cdiv_r(n, d);
assert(ceil(N_ / D_) * D_ + z_get_si(r2) = N_);
end;
procedure TTestGmpExtensions.z_fdiv_r_test;
const
N_ = -17;
D_ = 4;
var r, n, d, r2: MPInteger;
begin
z_init(r);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_fdiv_r(r, n, d);
assert(floor(N_ / D_) * D_ + z_get_si(r) = N_);
r2 := z_fdiv_r(n, d);
assert(floor(N_ / D_) * D_ + z_get_si(r2) = N_);
end;
procedure TTestGmpExtensions.z_tdiv_r_test;
const
N_ = -17;
D_ = 4;
var r, n, d, r2: MPInteger;
begin
z_init(r);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_tdiv_r(r, n, d);
assert(trunc(N_ / D_) * D_ + z_get_si(r) = N_);
r2 := z_tdiv_r(n, d);
assert(trunc(N_ / D_) * D_ + z_get_si(r2) = N_);
end;
procedure TTestGmpExtensions.z_cdiv_r_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var r, n, r2: MPInteger;
begin
z_init(r);
z_init_set_si(n, N_);
z_cdiv_r_2exp(r, n, B_);
assert(ceil(N_ / D_) * D_ + z_get_si(r) = N_);
r2 := z_cdiv_r_2exp(n, B_);
assert(ceil(N_ / D_) * D_ + z_get_si(r2) = N_);
end;
procedure TTestGmpExtensions.z_fdiv_r_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var r, n, r2: MPInteger;
begin
z_init(r);
z_init_set_si(n, N_);
z_fdiv_r_2exp(r, n, B_);
assert(floor(N_ / D_) * D_ + z_get_si(r) = N_);
r2 := z_fdiv_r_2exp(n, B_);
assert(floor(N_ / D_) * D_ + z_get_si(r2) = N_);
end;
procedure TTestGmpExtensions.z_tdiv_r_2exp_test;
const
N_ = -17;
B_ = 2;
D_ = 1 shl B_;
var r, n, r2: MPInteger;
begin
z_init(r);
z_init_set_si(n, N_);
z_tdiv_r_2exp(r, n, B_);
assert(trunc(N_ / D_) * D_ + z_get_si(r) = N_);
r2 := z_tdiv_r_2exp(n, B_);
assert(trunc(N_ / D_) * D_ + z_get_si(r2) = N_);
end;
procedure TTestGmpExtensions.z_cdiv_r_ui_test;
const
N_ = -17;
D_ = 4;
var
r, n: MPInteger;
ur: valuint;
begin
z_init(r);
z_init_set_si(n, N_);
ur := z_cdiv_r_ui(r, n, D_);
assert(ceil(N_ / D_) * D_ + z_get_si(r) = N_);
assert(ur - abs(z_get_si(r)) = 0);
end;
procedure TTestGmpExtensions.z_fdiv_r_ui_test;
const
N_ = -17;
D_ = 4;
var
r, n: MPInteger;
ur: valuint;
begin
z_init(r);
z_init_set_si(n, N_);
ur := z_fdiv_r_ui(r, n, D_);
assert(floor(N_ / D_) * D_ + z_get_si(r) = N_);
assert(ur - abs(z_get_si(r)) = 0);
end;
procedure TTestGmpExtensions.z_tdiv_r_ui_test;
const
N_ = -17;
D_ = 4;
var
r, n: MPInteger;
ur: valuint;
begin
z_init(r);
z_init_set_si(n, N_);
ur := z_tdiv_r_ui(r, n, D_);
assert(trunc(N_ / D_) * D_ + z_get_si(r) = N_);
assert(ur - abs(z_get_si(r)) = 0);
end;
procedure TTestGmpExtensions.z_cdiv_ui_test;
const
N_ = -17;
D_ = 4;
var n: MPInteger;
begin
z_init_set_si(n, N_);
assert(z_cdiv_ui(n, D_) - abs(N_ - ceil(N_ / D_) * D_) = 0);
end;
procedure TTestGmpExtensions.z_fdiv_ui_test;
const
N_ = -17;
D_ = 4;
var n: MPInteger;
begin
z_init_set_si(n, N_);
assert(z_fdiv_ui(n, D_) - abs(N_ - floor(N_ / D_) * D_) = 0);
end;
procedure TTestGmpExtensions.z_tdiv_ui_test;
const
N_ = -17;
D_ = 4;
var n: MPInteger;
begin
z_init_set_si(n, N_);
assert(z_tdiv_ui(n, D_) = abs(N_ - trunc(N_ / D_) * D_));
end;
procedure TTestGmpExtensions.z_mod_test;
const
N_ = 17;
D_ = -4;
var r, n, d, r2: MPInteger;
begin
z_init(r);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_mod(r, n, d);
assert(z_get_si(r) = N_ mod abs(D_));
r2 := z_mod(n, d);
assert(z_get_si(r2) = N_ mod abs(D_));
end;
procedure TTestGmpExtensions.z_divexact_test;
const
N_ = -16;
D_ = 4;
var q, n, d, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_init_set_si(d, D_);
z_divexact(q, n, d);
assert(z_get_si(q) * D_ = N_);
q2 := z_divexact(n, d);
assert(z_get_si(q2) * D_ = N_);
end;
procedure TTestGmpExtensions.z_divexact_ui_test;
const
N_ = -16;
D_ = 4;
var q, n, q2: MPInteger;
begin
z_init(q);
z_init_set_si(n, N_);
z_divexact_ui(q, n, D_);
assert(z_get_si(q) * D_ = N_);
q2 := z_divexact_ui(n, D_);
assert(z_get_si(q2) * D_ = N_);
end;
procedure TTestGmpExtensions.z_divisible_p_test;
const
N_ = -16;
D_ = 4;
var n, d: MPInteger;
begin
z_init_set_si(n, N_);
z_init_set_si(d, D_);
assert(z_divisible_p(n, d));
z_set_si(n, z_get_si(n) + 1);
assert(not z_divisible_p(n, d));
end;
procedure TTestGmpExtensions.z_divisible_ui_p_test;
const
N_ = -16;
D_ = 4;
var n: MPInteger;
begin
z_init_set_si(n, N_);
assert(z_divisible_ui_p(n, D_));
z_set_si(n, z_get_si(n) + 1);
assert(not z_divisible_ui_p(n, D_));
end;
procedure TTestGmpExtensions.z_divisible_2exp_p_test;
const
N_ = -16;
B_ = 2;
var n: MPInteger;
begin
z_init_set_si(n, N_);
assert(z_divisible_2exp_p(n, B_));
z_set_si(n, z_get_si(n) + 1);
assert(not z_divisible_ui_p(n, B_));
end;
procedure TTestGmpExtensions.z_congruent_p_test;
const
N_ = 23;
C_ = 6;
D_ = 17;
var n, c, d: MPInteger;
begin
z_init_set_si(n, N_);
z_init_set_si(c, C_);
z_init_set_si(d, D_);
assert(z_congruent_p(n, c, d));
z_set_si(n, z_get_si(n) + 1);
assert(not z_congruent_p(n, c, d));
end;
procedure TTestGmpExtensions.z_congruent_2exp_p_test;
const
N_ = 23;
C_ = 7;
B_ = 4;
var n, c: MPInteger;
begin
z_init_set_si(n, N_);
z_init_set_si(c, C_);
assert(z_congruent_2exp_p(n, c, B_));
z_set_si(n, z_get_si(n) + 1);
assert(not z_congruent_2exp_p(n, c, B_));
end;
procedure TTestGmpExtensions.z_congruent_ui_p_test;
const
N_ = 23;
C_ = 6;
D_ = 17;
var n: MPInteger;
begin
z_init_set_si(n, N_);
assert(z_congruent_ui_p(n, C_, D_));
z_set_si(n, z_get_si(n) + 1);
assert(not z_congruent_ui_p(n, C_, D_));
end;
procedure TTestGmpExtensions.z_powm_test;
const
N_EXP = 3;
N_MOD = 16;
ROP_ = 8;
var rop, base, exp, mod_, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(base, BASE10);
z_init_set_si(exp, N_EXP);
z_init_set_si(mod_, N_MOD);
z_powm(rop, base, exp, mod_);
assert(z_get_si(rop) = ROP_);
r2 := z_powm(base, exp, mod_);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_powm_ui_test;
const
N_EXP = 3;
N_MOD = 16;
ROP_ = 8;
var rop, base, mod_, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(base, BASE10);
z_init_set_si(mod_, N_MOD);
z_powm_ui(rop, base, N_EXP, mod_);
assert(z_get_si(rop) = ROP_);
r2 := z_powm_ui(base, N_EXP, mod_);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_pow_ui_test;
const
BASE_ = 10;
EXP = 3;
var rop, base, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(base, BASE_);
z_pow_ui(rop, base, EXP);
assert(z_get_si(rop) = BASE_ ** EXP);
r2 := z_pow_ui(base, EXP);
assert(z_get_si(r2) = BASE_ ** EXP);
end;
procedure TTestGmpExtensions.z_ui_pow_ui_test;
const
BASE_ = 10;
EXP = 3;
var rop, r2: MPInteger;
begin
z_init(rop);
z_ui_pow_ui(rop, BASE_, EXP);
assert(z_get_si(rop) = BASE_ ** EXP);
r2 := z_ui_pow_ui(BASE_, EXP);
assert(z_get_si(r2) = BASE_ ** EXP);
end;
procedure TTestGmpExtensions.z_root_test;
const
ROOT = 5;
N_ = 3;
var rop, op: MPInteger;
begin
z_init(rop);
z_init_set_si(op, ROOT ** N_);
assert(z_root(rop, op, N_));
assert(z_get_si(rop) = ROOT);
z_set_si(op, ROOT ** N_ + 1);
assert(not z_root(rop, op, N_));
assert(z_get_si(rop) = ROOT);
end;
procedure TTestGmpExtensions.z_rootrem_test;
const
ROOT_ = 5;
N_ = 3;
REM_ = 1;
var root, rem, u: MPInteger;
begin
assert(REM_ < ROOT_);
z_init(root);
z_init(rem);
z_init_set_si(u, ROOT_ ** N_);
z_rootrem(root, rem, u, N_);
assert(z_get_si(root) = ROOT_);
assert(z_get_si(rem) = 0);
z_set_si(u, ROOT_ ** N_ + REM_);
z_rootrem(root, rem, u, N_);
assert(z_get_si(root) = ROOT_);
assert(z_get_si(rem) = REM_);
end;
procedure TTestGmpExtensions.z_sqrt_test;
const ROOT = 5;
var rop, op, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op, ROOT ** 2);
z_sqrt(rop, op);
assert(z_get_si(rop) = ROOT);
r2 := z_sqrt(op);
assert(z_get_si(r2) = ROOT);
end;
procedure TTestGmpExtensions.z_sqrtrem_test;
const
ROOT = 5;
REM = 1;
var rop1, rop2, op: MPInteger;
begin
z_init(rop1);
z_init(rop2);
z_init_set_si(op, ROOT ** 2 + REM);
z_sqrtrem(rop1, rop2, op);
assert(z_get_si(rop1) = ROOT);
assert(z_get_si(rop2) = REM);
end;
procedure TTestGmpExtensions.z_perfect_power_p_test;
const
ROOT = 3;
EXP = 3;
var op: MPInteger;
begin
z_init_set_si(op, ROOT ** EXP);
assert(z_perfect_power_p(op));
z_set_si(op, ROOT ** EXP + 1);
assert(not z_perfect_power_p(op));
end;
procedure TTestGmpExtensions.z_perfect_square_p_test;
const ROOT = 3;
var op: MPInteger;
begin
z_init_set_si(op, ROOT ** 2);
assert(z_perfect_square_p(op));
z_set_si(op, ROOT ** 2 or 2);
assert(not z_perfect_square_p(op));
end;
procedure TTestGmpExtensions.z_probab_prime_p_test;
const
N_ = 127;
REPS = 5;
var n: MPInteger;
begin
z_init_set_si(n, N_);
assert(z_probab_prime_p(n, REPS) = 2);
z_set_si(n, N_ + 1);
assert(z_probab_prime_p(n, REPS) = 0);
end;
procedure TTestGmpExtensions.z_nextprime_test;
const
PRIME3 = 5;
PRIME4 = 7;
var rop, op, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op, PRIME3);
z_nextprime(rop, op);
assert(z_get_si(rop) = PRIME4);
r2 := z_nextprime(op);
assert(z_get_si(r2) = PRIME4);
end;
procedure TTestGmpExtensions.z_gcd_test;
const
OP_1 = 42;
OP_2 = 56;
ROP_ = 14;
var rop, op1, op2, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_gcd(rop, op1, op2);
assert(z_get_si(rop) = ROP_);
r2 := z_gcd(op1, op2);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_gcd_ui_test;
const
OP_1 = 42;
OP_2 = 56;
ROP_ = 14;
var rop, op1: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
assert(z_gcd_ui(rop, op1, OP_2) = ROP_);
assert(z_get_si(rop) = ROP_);
end;
procedure TTestGmpExtensions.z_gcdext_test;
const
A_ = 42;
B_ = 56;
G_ = 14;
var g, s, t, a, b: MPInteger;
begin
z_init(g);
z_init(s);
z_init(t);
z_init_set_si(a, A_);
z_init_set_si(b, B_);
z_gcdext(g, s, t, a, b);
assert(z_get_si(g) = G_);
assert(A_ * z_get_si(s) + B_ * z_get_si(t) = G_);
end;
procedure TTestGmpExtensions.z_lcm_test;
const
OP_1 = 21;
OP_2 = 6;
ROP_ = 42;
var rop, op1, op2, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_lcm(rop, op1, op2);
assert(z_get_si(rop) = ROP_);
r2 := z_lcm(op1, op2);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_lcm_ui_test;
const
OP_1 = 21;
OP_2 = 6;
ROP_ = 42;
var rop, op1, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_lcm_ui(rop, op1, OP_2);
assert(z_get_si(rop) = ROP_);
r2 := z_lcm_ui(op1, OP_2);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_invert_test;
const
OP_1 = 256;
OP_2 = 337;
ROP_ = 104;
var rop, op1, op2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
assert(z_invert(rop, op1, op2) <> 0);
assert(z_get_si(rop) = ROP_);
end;
procedure TTestGmpExtensions.z_jacobi_test;
const
B0 = 11;
A0 = 13 * B0;
AM1 = 1001;
BM1 = 9907;
A1 = 4;
B1 = 7;
var a, b: MPInteger;
begin
z_init_set_si(a, A0);
z_init_set_si(b, B0);
assert(z_jacobi(a, b) = 0);
z_set_si(a, AM1);
z_set_si(b, BM1);
assert(z_jacobi(a, b) = -1);
z_set_si(a, A1);
z_set_si(b, B1);
assert(z_jacobi(a, b) = 1);
end;
procedure TTestGmpExtensions.z_kronecker_si_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var a: MPInteger;
begin
z_init_set_si(a, A_);
assert(z_kronecker_si(a, B1) = 1);
assert(z_kronecker_si(a, B0) = 0);
assert(z_kronecker_si(a, BM1) = -1);
end;
procedure TTestGmpExtensions.z_kronecker_ui_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var a: MPInteger;
begin
z_init_set_si(a, A_);
assert(z_kronecker_ui(a, B1) = 1);
assert(z_kronecker_ui(a, B0) = 0);
assert(z_kronecker_ui(a, BM1) = -1);
end;
procedure TTestGmpExtensions.z_si_kronecker_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var b: MPInteger;
begin
z_init_set_si(b, B1);
assert(z_si_kronecker(A_, b) = 1);
z_set_si(b, B0);
assert(z_si_kronecker(A_, b) = 0);
z_set_si(b, BM1);
assert(z_si_kronecker(A_, b) = -1);
end;
procedure TTestGmpExtensions.z_ui_kronecker_test;
const
A_ = 8;
B0 = 6;
BM1 = 5;
B1 = 7;
var b: MPInteger;
begin
z_init_set_si(b, B1);
assert(z_ui_kronecker(A_, b) = 1);
z_set_si(b, B0);
assert(z_ui_kronecker(A_, b) = 0);
z_set_si(b, BM1);
assert(z_ui_kronecker(A_, b) = -1);
end;
procedure TTestGmpExtensions.z_remove_test;
const
F_ = 5;
OP_ = 3 * F_ * 7;
ROP_ = OP_ div F_;
var rop, op, f: MPInteger;
begin
z_init(rop);
z_init_set_si(op, OP_);
z_init_set_si(f, F_);
assert(z_remove(rop, op, f) = 1);
assert(z_get_si(rop) = ROP_);
end;
procedure TTestGmpExtensions.z_fac_ui_test;
const
OP = 4;
ROP_ = 2 * 3 * 4;
var rop, r2: MPInteger;
begin
z_init(rop);
z_fac_ui(rop, OP);
assert(z_get_si(rop) = ROP_);
r2 := z_fac_ui(OP);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_bin_ui_test;
const
N_ = 7;
K = 3;
ROP_ = 35;
var rop, n, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(n, N_);
z_bin_ui(rop, n, K);
assert(z_get_si(rop) = ROP_);
r2 := z_bin_ui(n, K);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_bin_uiui_test;
const
N = 7;
K = 3;
ROP_ = 35;
var rop, r2: MPInteger;
begin
z_init(rop);
z_bin_uiui(rop, N, K);
assert(z_get_si(rop) = ROP_);
r2 := z_bin_uiui(N, K);
assert(z_get_si(r2) = ROP_);
end;
procedure TTestGmpExtensions.z_fib_ui_test;
const
N = 10;
FN_ = 55;
var fn, ff: MPInteger;
begin
z_init(fn);
z_fib_ui(fn, N);
assert(z_get_si(fn) = FN_);
ff := z_fib_ui(N);
assert(z_get_si(ff) = FN_);
end;
procedure TTestGmpExtensions.z_fib2_ui_test;
const
N = 10;
FN_ = 55;
FNSUB1_ = 34;
var fn, fnsub1, ff, ff1: MPInteger;
begin
z_init(fn);
z_init(fnsub1);
z_fib2_ui(fn, fnsub1, N);
assert(z_get_si(fn) = FN_);
assert(z_get_si(fnsub1) = FNSUB1_);
z_init(ff1);
ff := z_fib2_ui(ff1, N);
assert(z_get_si(ff) = FN_);
assert(z_get_si(ff1) = FNSUB1_);
end;
procedure TTestGmpExtensions.z_lucnum_ui_test;
const
N = 10;
LN_ = 123;
var ln, l2: MPInteger;
begin
z_init(ln);
z_lucnum_ui(ln, N);
assert(z_get_si(ln) = LN_);
l2 := z_lucnum_ui(N);
assert(z_get_si(l2) = LN_);
end;
procedure TTestGmpExtensions.z_lucnum2_ui_test;
const
N = 10;
LN_ = 123;
LNSUB1_ = 76;
var ln, lnsub1, l2, l2s1: MPInteger;
begin
z_init(ln);
z_init(lnsub1);
z_lucnum2_ui(ln, lnsub1, N);
assert(z_get_si(ln) = LN_);
assert(z_get_si(lnsub1) = LNSUB1_);
z_init(l2s1);
l2 := z_lucnum2_ui(l2s1, N);
assert(z_get_si(l2) = LN_);
assert(z_get_si(l2s1) = LNSUB1_);
end;
procedure TTestGmpExtensions.z_cmp_test;
const
OP_1 = -10;
OP_2 = OP_1 - 1;
var op1, op2: MPInteger;
begin
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
assert(z_cmp(op1, op2) > 0);
z_set_si(op2, OP_1);
assert(z_cmp(op1, op2) = 0);
z_set_si(op2, OP_1 + 1);
assert(z_cmp(op1, op2) < 0);
end;
procedure TTestGmpExtensions.z_cmp_d_test;
const
OP_1 = -10;
var op1: MPInteger;
begin
z_init_set_si(op1, OP_1);
assert(z_cmp_d(op1, OP_1 - 1) > 0);
assert(z_cmp_d(op1, OP_1) = 0);
assert(z_cmp_d(op1, OP_1 + 1) < 0);
end;
procedure TTestGmpExtensions.z_cmp_si_test;
const
OP_1 = -10;
var op1: MPInteger;
begin
z_init_set_si(op1, OP_1);
assert(z_cmp_si(op1, OP_1 - 1) > 0);
assert(z_cmp_si(op1, OP_1) = 0);
assert(z_cmp_si(op1, OP_1 + 1) < 0);
end;
procedure TTestGmpExtensions.z_cmp_ui_test;
const
OP_1 = 10;
var op1: MPInteger;
begin
z_init_set_si(op1, OP_1);
assert(z_cmp_ui(op1, OP_1 - 1) > 0);
assert(z_cmp_ui(op1, OP_1) = 0);
assert(z_cmp_ui(op1, OP_1 + 1) < 0);
end;
procedure TTestGmpExtensions.z_cmpabs_test;
const
OP_1 = -10;
OP_2 = -OP_1 - 1;
var op1, op2: MPInteger;
begin
z_init_set_si(op1, OP_1);
z_init_set_si(op2, -OP_2);
assert(z_cmpabs(op1, op2) > 0);
z_set_si(op2, -OP_1);
assert(z_cmpabs(op1, op2) = 0);
z_set_si(op2, -OP_1 + 1);
assert(z_cmpabs(op1, op2) < 0);
end;
procedure TTestGmpExtensions.z_cmpabs_d_test;
const OP_1 = -10;
var op1: MPInteger;
begin
z_init_set_si(op1, OP_1);
assert(z_cmpabs_d(op1, -OP_1 - 1) > 0);
assert(z_cmpabs_d(op1, -OP_1) = 0);
assert(z_cmpabs_d(op1, -OP_1 + 1) < 0);
end;
procedure TTestGmpExtensions.z_cmpabs_ui_test;
const OP_1 = -10;
var op1: MPInteger;
begin
z_init_set_si(op1, OP_1);
assert(z_cmpabs_ui(op1, -OP_1 - 1) > 0);
assert(z_cmpabs_ui(op1, -OP_1) = 0);
assert(z_cmpabs_ui(op1, -OP_1 + 1) < 0);
end;
procedure TTestGmpExtensions.z_and_test;
const
OP_1 = $c;
OP_2 = $a;
var rop, op1, op2, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_and(rop, op1, op2);
assert(z_get_si(rop) = OP_1 and OP_2);
r2 := z_and(op1, op2);
assert(z_get_si(r2) = OP_1 and OP_2);
end;
procedure TTestGmpExtensions.z_ior_test;
const
OP_1 = $c;
OP_2 = $a;
var rop, op1, op2, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_ior(rop, op1, op2);
assert(z_get_si(rop) = OP_1 or OP_2);
r2 := z_ior(op1, op2);
assert(z_get_si(r2) = OP_1 or OP_2);
end;
procedure TTestGmpExtensions.z_xor_test;
const
OP_1 = $c;
OP_2 = $a;
var rop, op1, op2, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
z_xor(rop, op1, op2);
assert(z_get_si(rop) = OP_1 xor OP_2);
r2 := z_xor(op1, op2);
assert(z_get_si(r2) = OP_1 xor OP_2);
end;
procedure TTestGmpExtensions.z_com_test;
const
OP_1 = 2;
var rop, op1, r2: MPInteger;
begin
z_init(rop);
z_init_set_si(op1, OP_1);
z_com(rop, op1);
assert(z_get_si(rop) = not OP_1 );
r2 := z_com(op1);
assert(z_get_si(r2) = not OP_1 );
end;
procedure TTestGmpExtensions.z_popcount_test;
const
OP_ = $55AA;
N = 8;
var op: MPInteger;
begin
z_init_set_si(op, OP_);
assert(z_popcount(op) = N);
end;
procedure TTestGmpExtensions.z_hamdist_test;
const
OP_1 = $55;
OP_2 = $7A;
N = 5;
var op1, op2: MPInteger;
begin
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
assert(z_hamdist(op1, op2) = N);
end;
procedure TTestGmpExtensions.z_scan0_test;
const
OP_ = $F75;
STARTING_BIT = 4;
N = 7;
var op: MPInteger;
begin
z_init_set_si(op, OP_);
assert(z_scan0(op, STARTING_BIT) = N);
end;
procedure TTestGmpExtensions.z_scan1_test;
const
OP_ = $85;
STARTING_BIT = 4;
N = 7;
var op: MPInteger;
begin
z_init_set_si(op, OP_);
assert(z_scan1(op, STARTING_BIT) = N);
end;
procedure TTestGmpExtensions.z_setbit_test;
const
ROP_ = $F75;
BIT_INDEX = 7;
var rop: MPInteger;
begin
z_init_set_ui(rop, ROP_);
z_setbit(rop, BIT_INDEX);
assert(z_get_ui(rop) = ROP_ or (1 shl BIT_INDEX));
end;
procedure TTestGmpExtensions.z_clrbit_test;
const
ROP_ = $F75;
BIT_INDEX = 9;
var rop: MPInteger;
begin
z_init_set_ui(rop, ROP_);
z_clrbit(rop, BIT_INDEX);
assert(z_get_ui(rop) = ROP_ and not (1 shl BIT_INDEX));
end;
procedure TTestGmpExtensions.z_combit_test;
const
ROP_ = $F75;
BIT_INDEX = 7;
var rop: MPInteger;
begin
z_init_set_ui(rop, ROP_);
z_combit(rop, BIT_INDEX);
assert(z_get_ui(rop) = ROP_ xor (1 shl BIT_INDEX));
end;
procedure TTestGmpExtensions.z_tstbit_test;
const
ROP_ = $F75;
BIT_INDEX1 = 7;
BIT_INDEX2 = 8;
var rop: MPInteger;
begin
z_init_set_ui(rop, ROP_);
assert(z_tstbit(rop, BIT_INDEX1) = longbool(ROP_ and (1 shl BIT_INDEX1)));
assert(z_tstbit(rop, BIT_INDEX2) = longbool(ROP_ and (1 shl BIT_INDEX2)));
end;
procedure TTestGmpExtensions.z_urandomb_test;
const
B = 8 * (sizeof(valuint) - 1);
N = 1 shl B;
var
rop, r2: MPInteger;
state: MPRandState;
begin
randinit_default(state);
z_init(rop);
z_urandomb(rop, state, B);
assert(z_cmp_ui(rop, N) < 0);
r2 := z_urandomb(state, B);
assert(z_cmp_ui(r2, N) < 0);
end;
procedure TTestGmpExtensions.z_urandomm_test;
const
N_ = 1000000;
var
rop, n, r2: MPInteger;
state: MPRandState;
begin
randinit_default(state);
z_init(rop);
z_init_set_ui(n, N_);
z_urandomm(rop, state, n);
assert(z_cmp_ui(rop, N_) < 0);
r2 := z_urandomm(state, n);
assert(z_cmp_ui(r2, N_) < 0);
end;
procedure TTestGmpExtensions.z_rrandomb_test;
const
B = 8 * sizeof(valuint) - 2;
N = 1 shl B;
var
rop, r2: MPInteger;
state: MPRandState;
begin
randinit_default(state);
z_init(rop);
z_rrandomb(rop, state, B);
assert(z_cmp_ui(rop, N) < 0);
r2 := z_rrandomb(state, B);
assert(z_cmp_ui(r2, N) < 0);
end;
procedure TTestGmpExtensions.z_fits_ushort_p_test;
var op: MPInteger;
begin
z_init_set_ui(op, high(word));
assert(z_fits_ushort_p(op));
z_add_ui(op, op, 1);
assert(not z_fits_ushort_p(op));
end;
procedure TTestGmpExtensions.z_fits_sshort_p_test;
var op: MPInteger;
begin
z_init_set_si(op, high(smallint));
assert(z_fits_sshort_p(op));
z_add_ui(op, op, 1);
assert(not z_fits_sshort_p(op));
end;
procedure TTestGmpExtensions.z_fits_uint_p_test;
var op: MPInteger;
begin
z_init_set_ui(op, high(cardinal));
assert(z_fits_uint_p(op));
z_add_ui(op, op, 1);
assert(not z_fits_uint_p(op));
end;
procedure TTestGmpExtensions.z_fits_sint_p_test;
var op: MPInteger;
begin
z_init_set_si(op, high(integer));
assert(z_fits_sint_p(op));
z_add_ui(op, op, 1);
assert(not z_fits_sint_p(op));
end;
procedure TTestGmpExtensions.z_fits_ulong_p_test;
var op: MPInteger;
begin
z_init_set_ui(op, high(valuint));
assert(z_fits_ulong_p(op));
z_add_ui(op, op, 1);
assert(not z_fits_ulong_p(op));
end;
procedure TTestGmpExtensions.z_fits_slong_p_test;
var op: MPInteger;
begin
z_init_set_si(op, high(valsint));
assert(z_fits_slong_p(op));
z_add_ui(op, op, 1);
assert(not z_fits_slong_p(op));
end;
procedure TTestGmpExtensions.z_sizeinbase_test;
const
OP_ = 1000000;
var rop: MPInteger;
begin
z_init_set_ui(rop, OP_);
assert(z_sizeinbase(rop, BASE10) - length(inttostr(OP_)) = 0);
end;
procedure TTestGmpExtensions.z_size_test;
var rop: MPInteger;
begin
z_init(rop);
assert(z_size(rop) = 0);
z_add_ui(rop, rop, 1);
assert(z_size(rop) = 1);
end;
procedure TTestGmpExtensions.q_init_test;
var rational: MPRational;
begin
q_init(rational);
assert(q_cmp_ui(rational, 0, 1) = 0);
end;
procedure TTestGmpExtensions.q_clear_test;
var rational: MPRational;
begin
q_init(rational);
q_clear(rational);
end;
procedure TTestGmpExtensions.q_set_ui_test;
const
OP_1 = 13;
OP_2 = 17;
var rational: MPRational;
begin
q_init(rational);
q_set_ui(rational, OP_1, OP_2);
assert(q_cmp_ui(rational, OP_1, OP_2) = 0);
end;
procedure TTestGmpExtensions.q_set_si_test;
const
OP_1 = -13;
OP_2 = 17;
var rational: MPRational;
begin
q_init(rational);
q_set_si(rational, OP_1, OP_2);
assert(q_cmp_si(rational, OP_1, OP_2) = 0);
end;
procedure TTestGmpExtensions.q_canonicalize_test;
const
OP_1 = -13;
OP_2 = 17;
CF = 11;
var rational: MPRational;
begin
q_init(rational);
q_set_si(rational, CF * OP_1, CF * OP_2);
q_canonicalize(rational);
assert(q_cmp_si(rational, OP_1, OP_2) = 0);
end;
procedure TTestGmpExtensions.q_set_test;
const
OP_1 = -13;
OP_2 = 17;
var rational1, rational2: MPRational;
begin
q_init(rational1);
q_init(rational2);
q_set_si(rational2, OP_1, OP_2);
q_set(rational1, rational2);
assert(q_cmp_si(rational1, OP_1, OP_2) = 0);
end;
procedure TTestGmpExtensions.q_set_z_test;
const
OP_1 = -13;
var
rational: MPRational;
op: MPInteger;
begin
q_init(rational);
z_init_set_si(op, OP_1);
q_set_z(rational, op);
assert(q_cmp_si(rational, OP_1, 1) = 0);
end;
procedure TTestGmpExtensions.q_set_str_test;
const
OP_1 = -13;
OP_2 = 17;
var rational: MPRational;
begin
q_init(rational);
assert(q_set_str(rational, pchar(inttostr(OP_1) + '/' + inttostr(OP_2)), BASE10));
assert(q_cmp_si(rational, OP_1, OP_2) = 0);
assert(not q_set_str(rational, pchar(inttostr(OP_1) + '*' + inttostr(OP_2)), BASE10));
end;
procedure TTestGmpExtensions.q_swap_test;
const
ROP_1N = -13;
ROP_1D = 17;
ROP_2N = -23;
ROP_2D = 31;
var rop1, rop2: MPRational;
begin
q_init(rop1);
q_init(rop2);
q_set_si(rop1, ROP_1N, ROP_1D);
q_set_si(rop2, ROP_2N, ROP_2D);
q_swap(rop1, rop2);
assert(q_cmp_si(rop1, ROP_2N, ROP_2D) = 0);
assert(q_cmp_si(rop2, ROP_1N, ROP_1D) = 0);
end;
procedure TTestGmpExtensions.q_get_d_test;
const
OP_1 = -1;
OP_2 = 2;
var op: MPRational;
begin
q_init(op);
q_set_si(op, OP_1, OP_2);
assert(q_get_d(op) = OP_1 / OP_2);
end;
procedure TTestGmpExtensions.q_set_d_test;
const
OP_1 = -1;
OP_2 = 2;
var rop: MPRational;
begin
q_init(rop);
q_set_d(rop, OP_1 / OP_2);
assert(q_cmp_si(rop, OP_1, OP_2) = 0);
end;
procedure TTestGmpExtensions.q_set_f_test;
const OP_ = -10;
var
op: MPFloat;
rop: MPRational;
begin
f_init_set_si(op, OP_);
q_init(rop);
q_set_f(rop, op);
assert(q_get_d(rop) = OP_);
end;
procedure TTestGmpExtensions.q_get_str_test;
const
OP_1 = -1;
OP_2 = 2;
var
op: MPRational;
p: pchar;
s, s2: string;
begin
q_init(op);
q_set_si(op, OP_1, OP_2);
s := q_get_str(BASE10, op);
assert(s = inttostr(OP_1) + '/' + inttostr(OP_2));
p := q_get_str(nil, BASE10, op);
assert(p = inttostr(OP_1) + '/' + inttostr(OP_2));
freemem(p);
setlength(s2, length(inttostr(OP_1) + '/' + inttostr(OP_2)));
assert(pointer(q_get_str(pchar(s2), BASE10, op)) = pointer(s2));
assert(s2 = inttostr(OP_1) + '/' + inttostr(OP_2));
end;
procedure TTestGmpExtensions.q_add_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var sum, addend1, addend2, s2: MPRational;
begin
q_init(sum);
q_init(addend1);
q_init(addend2);
q_set_si(addend1, N1, D1);
q_set_si(addend2, N2, D2);
q_add(sum, addend1, addend2);
assert(q_cmp_si(sum, N1 * D2 + N2 * D1, D1 * D2) = 0);
s2 := q_add(addend1, addend2);
assert(q_cmp_si(s2, N1 * D2 + N2 * D1, D1 * D2) = 0);
end;
procedure TTestGmpExtensions.q_sub_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var difference, minuend, subtrahend, diff2: MPRational;
begin
q_init(difference);
q_init(minuend);
q_init(subtrahend);
q_set_si(minuend, N1, D1);
q_set_si(subtrahend, N2, D2);
q_sub(difference, minuend, subtrahend);
assert(q_cmp_si(difference, N1 * D2 - N2 * D1, D1 * D2) = 0);
diff2 := q_sub(minuend, subtrahend);
assert(q_cmp_si(diff2, N1 * D2 - N2 * D1, D1 * D2) = 0);
end;
procedure TTestGmpExtensions.q_mul_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var product, multiplier, multiplicant, p2: MPRational;
begin
q_init(product);
q_init(multiplier);
q_init(multiplicant);
q_set_si(multiplier, N1, D1);
q_set_si(multiplicant, N2, D2);
q_mul(product, multiplier, multiplicant);
assert(q_cmp_si(product, N1 * N2, D1 * D2) = 0);
p2 := q_mul(multiplier, multiplicant);
assert(q_cmp_si(p2, N1 * N2, D1 * D2) = 0);
end;
procedure TTestGmpExtensions.q_mul_2exp_test;
const
N1 = 5;
D1 = 3;
OP_2 = 2;
var rop, op1, r2: MPRational;
begin
q_init(rop);
q_init(op1);
q_set_si(op1, N1, D1);
q_mul_2exp(rop, op1, OP_2);
assert(q_cmp_si(rop, N1 * (1 shl OP_2), D1) = 0);
r2 := q_mul_2exp(op1, OP_2);
assert(q_cmp_si(r2, N1 * (1 shl OP_2), D1) = 0);
end;
procedure TTestGmpExtensions.q_div_test;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var quotient, dividend, divisor, q2: MPRational;
begin
q_init(quotient);
q_init(dividend);
q_init(divisor);
q_set_si(dividend, N1, D1);
q_set_si(divisor, N2, D2);
q_div(quotient, dividend, divisor);
assert(q_cmp_si(quotient, -N1 * D2, -D1 * N2) = 0);
q2 := q_div(dividend, divisor);
assert(q_cmp_si(q2, -N1 * D2, -D1 * N2) = 0);
end;
procedure TTestGmpExtensions.q_div_2exp_test;
const
N1 = 5;
D1 = 3;
OP_2 = 2;
var rop, op1, r2: MPRational;
begin
q_init(rop);
q_init(op1);
q_set_si(op1, N1, D1);
q_div_2exp(rop, op1, OP_2);
assert(q_cmp_si(rop, N1, D1 * (1 shl OP_2)) = 0);
r2 := q_div_2exp(op1, OP_2);
assert(q_cmp_si(r2, N1, D1 * (1 shl OP_2)) = 0);
end;
procedure TTestGmpExtensions.q_neg_test;
const
N1 = -5;
D1 = 3;
var negated_operand, operand, n2: MPRational;
begin
q_init(negated_operand);
q_init(operand);
q_set_si(operand, N1, D1);
q_neg(negated_operand, operand);
assert(q_cmp_si(negated_operand, -N1, D1) = 0);
n2 := q_neg(operand);
assert(q_cmp_si(n2, -N1, D1) = 0);
end;
procedure TTestGmpExtensions.q_abs_test;
const
N1 = 5;
D1 = 3;
var rop, op, r2: MPRational;
begin
q_init(rop);
q_init(op);
q_set_si(op, -N1, D1);
q_abs(rop, op);
assert(q_cmp_si(rop, N1, D1) = 0);
r2 := q_abs(op);
assert(q_cmp_si(r2, N1, D1) = 0);
end;
procedure TTestGmpExtensions.q_inv_test;
const
N1 = -5;
D1 = 3;
var inverted_number, number, i2: MPRational;
begin
q_init(inverted_number);
q_init(number);
q_set_si(number, N1, D1);
q_inv(inverted_number, number);
assert(q_cmp_si(inverted_number, -D1, -N1) = 0);
i2 := q_inv(number);
assert(q_cmp_si(i2, -D1, -N1) = 0);
end;
procedure TTestGmpExtensions.q_cmp_test;
const
N1 = -7;
D1 = 5;
var op1, op2: MPRational;
begin
q_init(op1);
q_init(op2);
q_set_si(op1, N1, D1);
q_set_si(op2, N1, D1);
assert(q_cmp(op1, op2) = 0);
q_set_si(op1, N1 + 1, D1);
assert(q_cmp(op1, op2) > 0);
q_set_si(op1, N1 - 1, D1);
assert(q_cmp(op1, op2) < 0);
end;
procedure TTestGmpExtensions.q_cmp_si_test;
const
N1 = -7;
D1 = 5;
var op1: MPRational;
begin
q_init(op1);
q_set_si(op1, N1, D1);
assert(q_cmp_si(op1, N1, D1) = 0);
assert(q_cmp_si(op1, N1 - 1, D1) > 0);
assert(q_cmp_si(op1, N1 + 1, D1) < 0);
end;
procedure TTestGmpExtensions.q_cmp_ui_test;
const
N1 = 7;
D1 = 5;
var op1: MPRational;
begin
q_init(op1);
q_set_si(op1, N1, D1);
assert(q_cmp_ui(op1, N1, D1) = 0);
assert(q_cmp_ui(op1, N1 - 1, D1) > 0);
assert(q_cmp_ui(op1, N1 + 1, D1) < 0);
end;
procedure TTestGmpExtensions.q_equal_test;
const
N1 = -7;
D1 = 5;
var op1, op2: MPRational;
begin
q_init(op1);
q_init(op2);
q_set_si(op1, N1, D1);
q_set_si(op2, N1, D1);
assert(q_equal(op1, op2));
q_set_si(op1, N1 + 1, D1);
assert(not q_equal(op1, op2));
q_set_si(op1, N1 - 1, D1);
assert(not q_equal(op1, op2));
end;
procedure TTestGmpExtensions.q_get_num_test;
const
N1 = -7;
D1 = 5;
var
rational: MPRational;
numerator, n2: MPInteger;
begin
q_init(rational);
z_init(numerator);
q_set_si(rational, N1, D1);
q_get_num(numerator, rational);
assert(z_get_si(numerator) = N1);
n2 := q_get_num(rational);
assert(z_get_si(n2) = N1);
end;
procedure TTestGmpExtensions.q_get_den_test;
const
N1 = -7;
D1 = 5;
var
rational: MPRational;
denominator, d2: MPInteger;
begin
q_init(rational);
z_init(denominator);
q_set_si(rational, N1, D1);
q_get_den(denominator, rational);
assert(z_get_si(denominator) = D1);
d2 := q_get_den(rational);
assert(z_get_si(d2) = D1);
end;
procedure TTestGmpExtensions.q_set_num_test;
const
N1 = -7;
D1 = 5;
N2 = 3;
var
rational: MPRational;
numerator: MPInteger;
begin
q_init(rational);
z_init_set_si(numerator, N2);
q_set_si(rational, N1, D1);
q_set_num(rational, numerator);
assert(q_cmp_si(rational, N2, D1) = 0);
end;
procedure TTestGmpExtensions.q_set_den_test;
const
N1 = -7;
D1 = 5;
D2 = 3;
var
rational: MPRational;
denominator: MPInteger;
begin
q_init(rational);
z_init_set_si(denominator, D2);
q_set_si(rational, N1, D1);
q_set_den(rational, denominator);
assert(q_cmp_si(rational, N1, D2) = 0);
end;
procedure TTestGmpExtensions.f_get_default_prec_test;
begin
assert(f_get_default_prec > 0);
end;
procedure TTestGmpExtensions.f_set_default_prec_test;
var prec: valuint;
begin
prec := f_get_default_prec;
f_set_default_prec(2 * prec);
assert(f_get_default_prec = 2 * prec);
f_set_default_prec(prec);
end;
procedure TTestGmpExtensions.f_init_test;
var x: MPFloat;
begin
f_init(x);
assert(f_get_prec(x) = f_get_default_prec);
end;
procedure TTestGmpExtensions.f_init2_test;
var x: MPFloat;
begin
f_init2(x, 2 * f_get_default_prec);
assert(f_get_prec(x) = 2 * f_get_default_prec);
end;
procedure TTestGmpExtensions.f_clear_test;
var x: MPFloat;
begin
f_init(x);
f_clear(x);
end;
procedure TTestGmpExtensions.f_get_prec_test;
var x: MPFloat;
begin
f_init(x);
f_set_prec(x, 2 * f_get_default_prec);
assert(f_get_prec(x) = 2 * f_get_default_prec);
end;
procedure TTestGmpExtensions.f_set_prec_test;
var x: MPFloat;
begin
f_init(x);
f_set_prec(x, 2 * f_get_default_prec);
assert(f_get_prec(x) = 2 * f_get_default_prec);
end;
procedure TTestGmpExtensions.f_set_prec_raw_test;
const N = 10;
var x: MPFloat;
begin
f_init2(x, N * f_get_default_prec);
f_set_prec_raw(x, f_get_default_prec);
f_set_prec_raw(x, N * f_get_default_prec);
end;
procedure TTestGmpExtensions.f_set_q_test;
const OP_ = -10;
var
op: MPRational;
rop: MPFloat;
begin
q_init(op);
f_init(rop);
q_set_si(op, OP_, 1);
f_set_q(rop, op);
assert(f_get_si(rop) = OP_);
end;
procedure TTestGmpExtensions.f_set_ui_test;
const OP = 1000000;
var rop: MPFloat;
begin
f_init(rop);
f_set_ui(rop, OP);
assert(f_get_ui(rop) = OP);
end;
procedure TTestGmpExtensions.f_get_ui_test;
const OP = 1000000;
var rop: MPFloat;
begin
f_init(rop);
f_set_ui(rop, OP);
assert(f_get_ui(rop) = OP);
end;
procedure TTestGmpExtensions.f_set_si_test;
const OP = -1000000;
var rop: MPFloat;
begin
f_init(rop);
f_set_si(rop, OP);
assert(f_get_si(rop) = OP);
end;
procedure TTestGmpExtensions.f_get_si_test;
const OP = -1000000;
var rop: MPFloat;
begin
f_init(rop);
f_set_si(rop, OP);
assert(f_get_si(rop) = OP);
end;
procedure TTestGmpExtensions.f_set_test;
const N = -1000000;
var rop, op: MPFloat;
begin
f_init(rop);
f_init_set_si(op, N);
f_set(rop, op);
assert(f_get_si(rop) = N);
end;
procedure TTestGmpExtensions.f_set_str_test;
const N = -123;
var rop: MPFloat;
begin
f_init(rop);
assert(f_set_str(rop, inttostr(N), BASE10));
assert(f_get_si(rop) = N);
end;
procedure TTestGmpExtensions.f_swap_test;
const
ROP_1 = -13;
ROP_2 = -23;
var rop1, rop2: MPFloat;
begin
f_init_set_si(rop1, ROP_1);
f_init_set_si(rop2, ROP_2);
f_swap(rop1, rop2);
assert(f_get_si(rop1) = ROP_2);
assert(f_get_si(rop2) = ROP_1);
end;
procedure TTestGmpExtensions.f_get_d_test;
const N = -1.5;
var rop: MPFloat;
begin
f_init_set_d(rop, N);
assert(f_get_d(rop) = N);
end;
procedure TTestGmpExtensions.f_set_d_test;
const N = -1.5;
var rop: MPFloat;
begin
f_init(rop);
f_set_d(rop, N);
assert(f_get_d(rop) = N);
end;
procedure TTestGmpExtensions.f_set_z_test;
const
OP_1 = -13;
var
rop: MPFloat;
op: MPInteger;
begin
f_init(rop);
z_init_set_si(op, OP_1);
f_set_z(rop, op);
assert(f_get_si(rop) = OP_1);
end;
procedure TTestGmpExtensions.f_get_d_2exp_test;
const
M = 0.5;
E = 4;
N = (1 shl E) div 2;
var
rop: MPFloat;
exp: valsint;
begin
f_init_set_d(rop, N);
exp := -1;
assert(f_get_d_2exp(exp, rop) = M);
assert(exp = E);
end;
procedure TTestGmpExtensions.f_get_str_test;
const
N = 3.1416;
S = '31416';
E = 1;
var
op: MPFloat;
p: pchar;
exp: mp_exp_t;
s1: string;
begin
f_init_set_d(op, N);
p := f_get_str(nil, exp, BASE10, length(S), op);
assert(p = S);
assert(exp = E);
freemem(p);
setlength(s1, length(S));
assert(pointer(f_get_str(pchar(s1), exp, BASE10, length(s), op)) = pointer(s1));
assert(s1 = S);
s1 := f_get_str(exp, BASE10, length(S), op);
assert(s1 = S);
end;
procedure TTestGmpExtensions.f_add_test;
const
OP1_ = 1;
OP2_ = 2;
var rop, op1, op2, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
f_add(rop, op1, op2);
assert(f_get_d(rop) = OP1_ + OP2_);
r2 := f_add(op1, op2);
assert(f_get_d(r2) = OP1_ + OP2_);
end;
procedure TTestGmpExtensions.f_add_ui_test;
const
OP1_ = 1;
OP2_ = 2;
var rop, op1, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_add_ui(rop, op1, OP2_);
assert(f_get_d(rop) = OP1_ + OP2_);
r2 := f_add_ui(op1, OP2_);
assert(f_get_d(r2) = OP1_ + OP2_);
end;
procedure TTestGmpExtensions.f_sub_test;
const
OP1_ = 3;
OP2_ = 1;
var rop, op1, op2, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
f_sub(rop, op1, op2);
assert(f_get_d(rop) = OP1_ - OP2_);
r2 := f_sub(op1, op2);
assert(f_get_d(r2) = OP1_ - OP2_);
end;
procedure TTestGmpExtensions.f_sub_ui_test;
const
OP1_ = 3;
OP2_ = 1;
var rop, op1, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_sub_ui(rop, op1, OP2_);
assert(f_get_d(rop) = OP1_ - OP2_);
r2 := f_sub_ui(op1, OP2_);
assert(f_get_d(r2) = OP1_ - OP2_);
end;
procedure TTestGmpExtensions.f_ui_sub_test;
const
OP1_ = 3;
OP2_ = 1;
var rop, op2, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op2, OP2_);
f_ui_sub(rop, OP1_, op2);
assert(f_get_d(rop) = OP1_ - OP2_);
r2 := f_ui_sub(OP1_, op2);
assert(f_get_d(r2) = OP1_ - OP2_);
end;
procedure TTestGmpExtensions.f_mul_test;
const
OP1_ = 2;
OP2_ = 3;
var rop, op1, op2, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
f_mul(rop, op1, op2);
assert(f_get_d(rop) = OP1_ * OP2_);
r2 := f_mul(op1, op2);
assert(f_get_d(r2) = OP1_ * OP2_);
end;
procedure TTestGmpExtensions.f_mul_ui_test;
const
OP1_ = 2;
OP2_ = 3;
var rop, op1, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_mul_ui(rop, op1, OP2_);
assert(f_get_d(rop) = OP1_ * OP2_);
r2 := f_mul_ui(op1, OP2_);
assert(f_get_d(r2) = OP1_ * OP2_);
end;
procedure TTestGmpExtensions.f_mul_2exp_test;
const
OP1_ = 3;
OP2_ = 4;
var rop, op1, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_mul_2exp(rop, op1, OP2_);
assert(f_get_d(rop) = OP1_ * (1 shl OP2_));
r2 := f_mul_2exp(op1, OP2_);
assert(f_get_d(r2) = OP1_ * (1 shl OP2_));
end;
procedure TTestGmpExtensions.f_div_test;
const
OP1_ = 6;
OP2_ = 2;
var rop, op1, op2, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
f_div(rop, op1, op2);
assert(f_get_d(rop) = OP1_ / OP2_);
r2 := f_div(op1, op2);
assert(f_get_d(r2) = OP1_ / OP2_);
end;
procedure TTestGmpExtensions.f_div_ui_test;
const
OP1_ = 6;
OP2_ = 2;
var rop, op1, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_div_ui(rop, op1, OP2_);
assert(f_get_d(rop) = OP1_ / OP2_);
r2 := f_div_ui(op1, OP2_);
assert(f_get_d(r2) = OP1_ / OP2_);
end;
procedure TTestGmpExtensions.f_ui_div_test;
const
OP1_ = 6;
OP2_ = 2;
var rop, op2, r2: MPFloat;
begin
f_init(rop);
f_init_set_si(op2, OP2_);
f_ui_div(rop, OP1_, op2);
assert(f_get_d(rop) = OP1_ / OP2_);
r2 := f_ui_div(OP1_, op2);
assert(f_get_d(r2) = OP1_ / OP2_);
end;
procedure TTestGmpExtensions.f_div_2exp_test;
const
OP1_ = 16;
OP2_ = 2;
var rop, op1, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_div_2exp(rop, op1, OP2_);
assert(f_get_d(rop) = OP1_ / (1 shl OP2_));
r2 := f_div_2exp(op1, OP2_);
assert(f_get_d(r2) = OP1_ / (1 shl OP2_));
end;
procedure TTestGmpExtensions.f_sqrt_test;
const
OP_ = 4;
var rop, op, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op, OP_);
f_sqrt(rop, op);
assert(f_get_d(rop) = sqrt(OP_));
r2 := f_sqrt(op);
assert(f_get_d(r2) = sqrt(OP_));
end;
procedure TTestGmpExtensions.f_sqrt_ui_test;
const
OP_ = 4;
var rop, r2: MPFloat;
begin
f_init(rop);
f_sqrt_ui(rop, OP_);
assert(f_get_d(rop) = sqrt(OP_));
r2 := f_sqrt_ui(OP_);
assert(f_get_d(r2) = sqrt(OP_));
end;
procedure TTestGmpExtensions.f_pow_ui_test;
const
OP1_ = 3;
OP2_ = 2;
var rop, op1, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_pow_ui(rop, op1, OP2_);
assert(f_get_d(rop) = OP1_ ** OP2_);
r2 := f_pow_ui(op1, OP2_);
assert(f_get_d(r2) = OP1_ ** OP2_);
end;
procedure TTestGmpExtensions.f_neg_test;
const
OP_ = 4;
var rop, op, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op, OP_);
f_neg(rop, op);
assert(f_get_d(rop) = -OP_);
r2 := f_neg(op);
assert(f_get_d(r2) = -OP_);
end;
procedure TTestGmpExtensions.f_abs_test;
const OP_ = -4;
var rop, op, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op, OP_);
f_abs(rop, op);
assert(f_get_d(rop) = -OP_);
r2 := f_abs(op);
assert(f_get_d(r2) = -OP_);
end;
procedure TTestGmpExtensions.f_cmp_test;
const OP_1 = -10;
var op1, op2: MPFloat;
begin
f_init_set_si(op1, OP_1);
f_init_set_si(op2, OP_1);
assert(f_cmp(op1, op2) = 0);
f_set_si(op2, OP_1 + 1);
assert(f_cmp(op1, op2) < 0);
f_set_si(op2, OP_1 - 1);
assert(f_cmp(op1, op2) > 0);
end;
procedure TTestGmpExtensions.f_cmp_d_test;
const OP_ = -10;
var op: MPFloat;
begin
f_init_set_si(op, OP_);
assert(f_cmp_d(op, OP_) = 0);
assert(f_cmp_d(op, OP_ + 1) < 0);
assert(f_cmp_d(op, OP_ - 1) > 0);
end;
procedure TTestGmpExtensions.f_cmp_si_test;
const OP_ = -10;
var op: MPFloat;
begin
f_init_set_si(op, OP_);
assert(f_cmp_si(op, OP_) = 0);
assert(f_cmp_si(op, OP_ + 1) < 0);
assert(f_cmp_si(op, OP_ - 1) > 0);
end;
procedure TTestGmpExtensions.f_cmp_ui_test;
const OP_ = 10;
var op: MPFloat;
begin
f_init_set_si(op, OP_);
assert(f_cmp_ui(op, OP_) = 0);
assert(f_cmp_ui(op, OP_ + 1) < 0);
assert(f_cmp_ui(op, OP_ - 1) > 0);
end;
procedure TTestGmpExtensions.f_eq_test;
const
OP_1 = 10;
OP_3 = 8;
var op1, op2: MPFloat;
begin
f_init_set_si(op1, OP_1);
f_init_set_si(op2, OP_1);
assert(f_eq(op1, op2, OP_3));
end;
procedure TTestGmpExtensions.f_reldiff_test;
const
OP1_ = 4;
OP2_ = 2;
var rop, op1, op2, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
f_reldiff(rop, op1, op2);
assert(f_get_d(rop) = abs(OP1_ - OP2_) / OP1_);
r2 := f_reldiff(op1, op2);
assert(f_get_d(r2) = abs(OP1_ - OP2_) / OP1_);
end;
procedure TTestGmpExtensions.f_ceil_test;
const N = 3.1;
var rop, op, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op, N);
f_ceil(rop, op);
assert(f_get_d(rop) = ceil(N));
r2 := f_ceil(op);
assert(f_get_d(r2) = ceil(N));
end;
procedure TTestGmpExtensions.f_floor_test;
const N = 3.9;
var rop, op, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op, N);
f_floor(rop, op);
assert(f_get_d(rop) = floor(N));
r2 := f_floor(op);
assert(f_get_d(r2) = floor(N));
end;
procedure TTestGmpExtensions.f_trunc_test;
const N = -3.9;
var rop, op, r2: MPFloat;
begin
f_init(rop);
f_init_set_d(op, N);
f_trunc(rop, op);
assert(f_get_d(rop) = trunc(N));
r2 := f_trunc(op);
assert(f_get_d(r2) = trunc(N));
end;
procedure TTestGmpExtensions.f_integer_p_test;
const
N1 = 10;
N2 = 10.1;
var op: MPFloat;
begin
f_init_set_si(op, N1);
assert(f_integer_p(op));
f_set_d(op, N2);
assert(not f_integer_p(op));
end;
procedure TTestGmpExtensions.f_fits_ushort_p_test;
var op: MPFloat;
begin
f_init_set_ui(op, high(word));
assert(f_fits_ushort_p(op));
f_add_ui(op, op, 1);
assert(not f_fits_ushort_p(op));
end;
procedure TTestGmpExtensions.f_fits_sshort_p_test;
var op: MPFloat;
begin
f_init_set_ui(op, high(smallint));
assert(f_fits_sshort_p(op));
f_add_ui(op, op, 1);
assert(not f_fits_sshort_p(op));
f_clear(op);
end;
procedure TTestGmpExtensions.f_fits_uint_p_test;
var op: MPFloat;
begin
f_init_set_ui(op, high(cardinal));
assert(f_fits_uint_p(op));
f_add_ui(op, op, 1);
assert(not f_fits_uint_p(op));
f_clear(op);
end;
procedure TTestGmpExtensions.f_fits_sint_p_test;
var op: MPFloat;
begin
f_init_set_ui(op, high(integer));
assert(f_fits_sint_p(op));
f_add_ui(op, op, 1);
assert(not f_fits_sint_p(op));
f_clear(op);
end;
procedure TTestGmpExtensions.f_fits_ulong_p_test;
var op: MPFloat;
begin
f_init_set_ui(op, high(valuint));
assert(f_fits_ulong_p(op));
f_add_ui(op, op, 1);
assert(not f_fits_ulong_p(op));
f_clear(op);
end;
procedure TTestGmpExtensions.f_fits_slong_p_test;
var op: MPFloat;
begin
f_init_set_ui(op, high(valsint));
assert(f_fits_slong_p(op));
f_add_ui(op, op, 1);
assert(not f_fits_slong_p(op));
f_clear(op);
end;
procedure TTestGmpExtensions.f_urandomb_test;
const NBITS = 100;
var
rop, r2: MPFloat;
state: MPRandState;
cmp: longint;
begin
randinit_default(state);
f_init(rop);
f_urandomb(rop, state, NBITS);
cmp := f_cmp_ui(rop, 0);
assert(cmp >= 0);
assert(f_cmp_ui(rop, 1) < 0);
r2 := f_urandomb(state, NBITS);
cmp := f_cmp_ui(r2, 0);
assert(cmp >= 0);
assert(f_cmp_ui(r2, 1) < 0);
end;
procedure TTestGmpExtensions.f_random2_test;
var
rop, r2: MPFloat;
begin
f_init(rop);
f_random2(rop, 1, 1);
r2 := f_random2(1, 1);
assert(assigned(r2))
end;
procedure TTestGmpExtensions.f_init_set_test;
const N = -1000000;
var rop, op: MPFloat;
begin
f_init_set_si(op, N);
f_init_set(rop, op);
assert(f_get_si(rop) = N);
end;
procedure TTestGmpExtensions.f_init_set_d_test;
const N = -1.5;
var rop: MPFloat;
begin
f_init_set_d(rop, N);
assert(f_get_d(rop) = N);
end;
procedure TTestGmpExtensions.f_init_set_si_test;
const N = -5;
var rop: MPFloat;
begin
f_init_set_si(rop, N);
assert(f_get_si(rop) = N);
end;
procedure TTestGmpExtensions.f_init_set_str_test;
const N = -123;
var rop: MPFloat;
begin
f_init_set_str(rop, inttostr(N), BASE10);
assert(f_get_si(rop) = N);
end;
procedure TTestGmpExtensions.f_init_set_ui_test;
const N = 5;
var rop: MPFloat;
begin
f_init_set_ui(rop, N);
assert(f_get_ui(rop) = N);
end;
{ TTestGmpOperators }
// operator * (op1: MPFloat; op2: MPFloat): MPFloat;
procedure TTestGmpOperators.star__MPFloat__MPFloat__MPFloat_;
const
OP1_ = 2;
OP2_ = 3;
var rop, op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
rop := op1 * op2;
assert(f_get_d(rop) = OP1_ * OP2_);
end;
// operator * (op1: MPInteger; op2: MPInteger): MPInteger;
procedure TTestGmpOperators.star__MPInteger__MPInteger__MPInteger_;
const
OP_1 = -10;
OP_2 = 1000;
var rop, op1, op2: MPInteger;
begin
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
rop := op1 * op2;
assert(z_get_si(rop) = OP_1 * OP_2);
end;
// operator * (op1: MPRational; op2: MPRational): MPRational;
procedure TTestGmpOperators.star__MPRational__MPRational__MPRational_;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var product, multiplier, multiplicant: MPRational;
begin
q_init(multiplier);
q_init(multiplicant);
q_set_si(multiplier, N1, D1);
q_set_si(multiplicant, N2, D2);
product := multiplier * multiplicant;
assert(q_cmp_si(product, N1 * N2, D1 * D2) = 0);
end;
// operator ** (op1: MPFloat; op2: valuint): MPFloat;
procedure TTestGmpOperators.pow__MPFloat_valuint_MPFloat_;
const
OP1_ = 3;
OP2_ = 2;
var rop, op1: MPFloat;
begin
f_init_set_d(op1, OP1_);
rop := op1 ** OP2_;
assert(f_get_d(rop) = OP1_ ** OP2_);
end;
// operator ** (op1: MPInteger; op2: valuint): MPInteger;
procedure TTestGmpOperators.pow__MPInteger_valuint_MPInteger_;
const
BASE_ = 10;
EXP = 3;
var rop, base: MPInteger;
begin
z_init_set_si(base, BASE_);
rop := base ** EXP;
assert(z_get_si(rop) = BASE_ ** EXP);
end;
// operator + (op1: MPFloat; op2: MPFloat): MPFloat;
procedure TTestGmpOperators.plus__MPFloat__MPFloat__MPFloat_;
const
OP1_ = 1;
OP2_ = 2;
var rop, op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
rop := op1 + op2;
assert(f_get_d(rop) = OP1_ + OP2_);
end;
// operator + (op1: MPInteger; op2: MPInteger): MPInteger;
procedure TTestGmpOperators.plus__MPInteger__MPInteger__MPInteger_;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, op2: MPInteger;
begin
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
rop := op1 + op2;
assert(z_get_si(rop) = OP_1 + OP_2);
end;
// operator + (op1: MPRational; op2: MPRational): MPRational;
procedure TTestGmpOperators.plus__MPRational__MPRational__MPRational_;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var sum, addend1, addend2: MPRational;
begin
q_init(addend1);
q_init(addend2);
q_set_si(addend1, N1, D1);
q_set_si(addend2, N2, D2);
sum := addend1 + addend2;
assert(q_cmp_si(sum, N1 * D2 + N2 * D1, D1 * D2) = 0);
end;
// operator - (op: MPFloat): MPFloat;
procedure TTestGmpOperators.minus__MPFloat__MPFloat_;
const
OP_ = 4;
var rop, op: MPFloat;
begin
f_init_set_d(op, OP_);
rop := -op;
assert(f_get_d(rop) = -OP_);
end;
// operator - (op: MPInteger): MPInteger;
procedure TTestGmpOperators.minus__MPInteger__MPInteger_;
const OP_ = 1000;
var rop, op: MPInteger;
begin
z_init_set_si(op, OP_);
rop := -op;
assert(z_get_si(rop) = -OP_);
end;
// operator - (op: MPRational): MPRational;
procedure TTestGmpOperators.minus__MPRational__MPRational_;
const
N1 = -5;
D1 = 3;
var negated_operand, operand: MPRational;
begin
q_init(negated_operand);
q_init(operand);
q_set_si(operand, N1, D1);
negated_operand := - operand;
assert(q_cmp_si(negated_operand, -N1, D1) = 0);
end;
// operator - (op1: MPFloat; op2: MPFloat): MPFloat;
procedure TTestGmpOperators.minus__MPFloat__MPFloat__MPFloat_;
const
OP1_ = 3;
OP2_ = 1;
var rop, op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
rop := op1 - op2;
assert(f_get_d(rop) = OP1_ - OP2_);
end;
// operator - (op1: MPInteger; op2: MPInteger): MPInteger;
procedure TTestGmpOperators.minus__MPInteger__MPInteger__MPInteger_;
const
OP_1 = -1000;
OP_2 = 1000000;
var rop, op1, op2: MPInteger;
begin
z_init_set_si(op1, OP_1);
z_init_set_si(op2, OP_2);
rop := op1 - op2;
assert(z_get_si(rop) = OP_1 - OP_2);
end;
// operator - (op1: MPRational; op2: MPRational): MPRational;
procedure TTestGmpOperators.minus__MPRational__MPRational__MPRational_;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var difference, minuend, subtrahend: MPRational;
begin
q_init(minuend);
q_init(subtrahend);
q_set_si(minuend, N1, D1);
q_set_si(subtrahend, N2, D2);
difference := minuend - subtrahend;
assert(q_cmp_si(difference, N1 * D2 - N2 * D1, D1 * D2) = 0);
end;
// operator / (op1: MPFloat; op2: MPFloat): MPFloat;
procedure TTestGmpOperators.slash__MPFloat__MPFloat__MPFloat_;
const
OP1_ = 6;
OP2_ = 2;
var rop, op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
rop := op1 / op2;
assert(f_get_d(rop) = OP1_ / OP2_);
end;
// operator / (op1: MPInteger; op2: MPInteger): MPInteger;
procedure TTestGmpOperators.slash__MPInteger__MPInteger__MPInteger_;
const
N_ = -17;
D_ = 4;
var q, n, d: MPInteger;
begin
z_init_set_si(n, N_);
z_init_set_si(d, D_);
q := n / d;
assert(z_get_si(q) = trunc(N_ / D_));
end;
// operator / (op1: MPRational; op2: MPRational): MPRational;
procedure TTestGmpOperators.slash__MPRational__MPRational__MPRational_;
const
N1 = 5;
D1 = 2;
N2 = -7;
D2 = 3;
var quotient, dividend, divisor: MPRational;
begin
q_init(dividend);
q_init(divisor);
q_set_si(dividend, N1, D1);
q_set_si(divisor, N2, D2);
quotient := dividend / divisor;
assert(q_cmp_si(quotient, -N1 * D2, -D1 * N2) = 0);
end;
// operator := (op: double): MPFloat;
procedure TTestGmpOperators.assign_double_MPFloat_;
const N = -1.5;
var rop: MPFloat;
begin
rop := N;
assert(f_get_d(rop) = N);
end;
// operator := (op: double): MPInteger;
procedure TTestGmpOperators.assign_double_MPInteger_;
const OP_ = 1000000;
var rop: MPInteger;
begin
rop := OP_;
assert(z_get_si(rop) = OP_);
end;
// operator := (op: double): MPRational;
procedure TTestGmpOperators.assign_double_MPRational_;
const
OP_1 = -1;
OP_2 = 2;
var rop: MPRational;
begin
rop := OP_1 / OP_2;
assert(q_cmp_si(rop, OP_1, OP_2) = 0);
end;
// operator := (op: MPFloat): cardinal;
procedure TTestGmpOperators.assign__MPFloat_Cardinal;
const OP = 1000000;
var rop: MPFloat;
begin
rop := OP;
assert(f_get_ui(rop) = OP);
end;
// operator := (op: MPFloat): double;
procedure TTestGmpOperators.assign__MPFloat_double;
const N = -1.5;
var rop: MPFloat;
begin
rop := N;
assert(f_get_d(rop) = N);
end;
// operator := (op: MPFloat): integer;
procedure TTestGmpOperators.assign__MPFloat_integer;
const OP = -1000000;
var rop: MPFloat;
begin
rop := OP;
assert(f_get_si(rop) = OP);
end;
// operator := (op: MPFloat): mpf_t;
procedure TTestGmpOperators.assign__MPFloat_mpf_t;
const N = -1000000;
var
rop: mpf_t;
op: MPFloat;
begin
f_init_set_si(op, N);
rop := op;
assert(mpf_get_si(rop) = N);
mpf_clear(rop);
end;
// operator := (op: MPFloat): MPInteger;
procedure TTestGmpOperators.assign__MPFloat__MPInteger_;
const OP_ = -10;
var
op: MPFloat;
rop: MPInteger;
begin
f_init_set_si(op, OP_);
rop := op;
assert(z_get_si(rop) = OP_);
end;
// operator := (op: MPFloat): MPRational;
procedure TTestGmpOperators.assign__MPFloat__MPRational_;
const OP_ = -10;
var
op: MPFloat;
rop: MPRational;
begin
f_init_set_si(op, OP_);
rop := op;
assert(q_get_d(rop) = OP_);
end;
// operator := (op: MPFloat): string;
procedure TTestGmpOperators.assign__MPFloat_string;
const
N = 123456;
S = '123456';
var
op: MPFloat;
r: string;
begin
f_init_set_d(op, N);
r := op;
assert(r = S);
end;
// operator := (op: MPFloat): valsint;
procedure TTestGmpOperators.assign__MPFloat_valsint;
const OP_ = -1000000;
var
op: MPFloat;
r: valsint;
begin
f_init_set_si(op, OP_);
r := op;
assert(r = OP_);
end;
// operator := (op: MPFloat): valuint;
procedure TTestGmpOperators.assign__MPFloat_valuint;
const OP_ = 1000000;
var
op: MPFloat;
r: valuint;
begin
f_init_set_si(op, OP_);
r := op;
assert(r = OP_);
end;
// operator := (var op: mpf_t): MPFloat;
procedure TTestGmpOperators.assign_mpf_t_MPFloat_;
const N = -1000000;
var
op: mpf_t;
rop: MPFloat;
begin
mpf_init_set_si(op, N);
rop := op;
assert(f_get_si(rop) = N);
mpf_clear(op);
end;
// operator := (op: MPInteger): cardinal;
procedure TTestGmpOperators.assign__MPInteger_cardinal;
const N = 1000000;
var
op: MPInteger;
r: cardinal;
begin
z_init_set_ui(op, N);
r := op;
assert(r = N);
end;
// operator := (op: MPInteger): double;
procedure TTestGmpOperators.assign__MPInteger_double;
const N = -1000;
var
op: MPInteger;
r: double;
begin
z_init_set_si(op, N);
r := op;
assert(r = N);
end;
// operator := (op: MPInteger): integer;
procedure TTestGmpOperators.assign__MPInteger_integer;
const N = -1000000;
var
op: MPInteger;
r: integer;
begin
z_init_set_si(op, N);
r := op;
assert(r = N);
end;
// operator := (op: MPInteger): MPFloat;
procedure TTestGmpOperators.assign__MPInteger__MPFloat_;
const
OP_1 = -13;
var
rop: MPFloat;
op: MPInteger;
begin
z_init_set_si(op, OP_1);
rop := op;
assert(f_get_si(rop) = OP_1);
end;
// operator := (op: MPInteger): MPRational;
procedure TTestGmpOperators.assign__MPInteger__MPRational_;
const
OP_1 = -13;
var
rational: MPRational;
op: MPInteger;
begin
z_init_set_si(op, OP_1);
rational := op;
assert(q_cmp_si(rational, OP_1, 1) = 0);
end;
// operator := (op: MPInteger): mpz_t;
procedure TTestGmpOperators.assign__MPInteger_mpz_t;
const N = -1000000;
var
rop: mpz_t;
op: MPInteger;
begin
z_init_set_si(op, N);
rop := op;
assert(mpz_get_si(rop) = N);
mpz_clear(rop);
end;
// operator := (op: MPInteger): string;
procedure TTestGmpOperators.assign__MPInteger_string;
const
N = 123456;
S = '123456';
var
op: MPInteger;
r: string;
begin
z_init_set_ui(op, N);
r := op;
assert(r = S);
end;
// operator := (op: MPInteger): valsint;
procedure TTestGmpOperators.assign__MPInteger_valsint;
const N = -1000000;
var
op: MPInteger;
r: valsint;
begin
z_init_set_si(op, N);
r := op;
assert(r = N);
end;
// operator := (op: MPInteger): valuint;
procedure TTestGmpOperators.assign__MPInteger_valuint;
const N = 1000000;
var
op: MPInteger;
r: valuint;
begin
z_init_set_ui(op, N);
r := op;
assert(r = N);
end;
// operator := (var op: mpq_t): MPRational;
procedure TTestGmpOperators.assign_mpq_t_MPRational_;
const
N = -17;
D = 3;
var
op: mpq_t;
rop: MPRational;
begin
mpq_init(op);
mpq_set_si(op, N, D);
rop := op;
assert(q_cmp_si(rop, N, D) = 0);
mpq_clear(op);
end;
// operator := (op: MPRandState): randstate_t;
procedure TTestGmpOperators.assign__MPRandState_randstate_t;
var
op: MPRandState;
rop: randstate_t;
begin
randinit_default(op);
rop := op;
assert(rnd_test(rop));
mp_randclear(rop);
end;
// operator := (op: MPRational): double;
procedure TTestGmpOperators.assign__MPRational_double;
const
OP_1 = -1;
OP_2 = 2;
var
op: MPRational;
r: double;
begin
q_init(op);
q_set_si(op, OP_1, OP_2);
r := op;
assert(r = OP_1 / OP_2);
end;
// operator := (op: MPRational): MPFloat;
procedure TTestGmpOperators.assign__MPRational__MPFloat_;
const OP_ = -10;
var
op: MPRational;
rop: MPFloat;
begin
q_init(op);
q_set_si(op, OP_, 1);
rop := op;
assert(f_get_si(rop) = OP_);
end;
// operator := (op: MPRational): MPInteger;
procedure TTestGmpOperators.assign__MPRational__MPInteger_;
const OP_ = -10;
var
op: MPRational;
rop: MPInteger;
begin
q_init(op);
q_set_si(op, OP_, 1);
rop := op;
assert(z_get_si(rop) = OP_);
end;
// operator := (op: MPRational): mpq_t;
procedure TTestGmpOperators.assign__MPRational_mpq_t;
const
OP_1 = -13;
OP_2 = 17;
var
rational: mpq_t;
op: MPRational;
begin
q_init(op);
q_set_si(op, OP_1, OP_2);
rational := op;
assert(mpq_cmp_si(rational, OP_1, OP_2) = 0);
mpq_clear(rational);
end;
// operator := (op: MPRational): string;
procedure TTestGmpOperators.assign__MPRational_string;
const
N = 5;
D = 3;
S = '5/3';
var
op: MPRational;
r: string;
begin
q_init(op);
q_set_si(op, N, D);
r := op;
assert(r = S);
end;
// operator := (var op: mpz_t): MPInteger;
procedure TTestGmpOperators.assign_mpz_t_MPInteger_;
const N = -1000000;
var
op: mpz_t;
rop: MPInteger;
begin
mpz_init_set_si(op, N);
rop := op;
assert(z_get_si(rop) = N);
mpz_clear(op);
end;
// operator := (var op: randstate_t): MPRandState;
procedure TTestGmpOperators.assign_randstate_t_MPRandState_;
var
op: randstate_t;
rop: MPRandState;
begin
mp_randinit_default(op);
rop := op;
assert(rnd_test(rop.ptr^));
mp_randclear(op);
end;
// operator := (op: string): MPFloat;
procedure TTestGmpOperators.assign_string_MPFloat_;
const N = -123;
var rop: MPFloat;
begin
rop := inttostr(N);
assert(f_get_si(rop) = N);
end;
// operator := (op: string): MPInteger;
procedure TTestGmpOperators.assign_string_MPInteger_;
const N = -123;
var rop: MPInteger;
begin
rop := inttostr(N);
assert(z_get_si(rop) = N);
end;
// operator := (op: string): MPRational;
procedure TTestGmpOperators.assign_string_MPRational_;
const
N = 5;
D = 3;
S = '5/3';
var rop: MPRational;
begin
rop := S;
assert(q_cmp_si(rop, N, D) = 0);
end;
// operator := (op: valsint): MPFloat;
procedure TTestGmpOperators.assign_valsint_MPFloat_;
const OP = -1000000;
var rop: MPFloat;
begin
rop := OP;
assert(f_get_si(rop) = OP);
end;
// operator := (op: valsint): MPInteger;
procedure TTestGmpOperators.assign_valsint_MPInteger_;
const OP = -1000000;
var rop: MPInteger;
begin
rop := OP;
assert(z_get_si(rop) = OP);
end;
// operator := (op: valsint): MPRational;
procedure TTestGmpOperators.assign_valsint_MPRational_;
const OP = -1000000;
var rop: MPRational;
begin
rop := OP;
assert(q_cmp_si(rop, OP, 1) = 0);
end;
// operator := (op: valuint): MPFloat;
procedure TTestGmpOperators.assign_valuint_MPFloat_;
const OP = 1000000;
var rop: MPFloat;
begin
rop := OP;
assert(f_get_ui(rop) = OP);
end;
// operator := (op: valuint): MPInteger;
procedure TTestGmpOperators.assign_valuint_MPInteger_;
const OP = 1000000;
var rop: MPInteger;
begin
rop := OP;
assert(z_get_ui(rop) = OP);
end;
// operator := (op: valuint): MPRational;
procedure TTestGmpOperators.assign_valuint_MPRational_;
const OP = 1000000;
var rop: MPRational;
begin
rop := OP;
assert(q_cmp_ui(rop, OP, 1) = 0);
end;
// operator < (op1: MPFloat; op2: MPFloat): boolean;
procedure TTestGmpOperators.lt__MPFloat__MPFloat_boolean;
const
OP1_ = 1.2;
OP2_ = OP1_ + 1;
var op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
assert(op1 < op2);
end;
// operator < (op1: MPInteger; op2: MPInteger): boolean;
procedure TTestGmpOperators.lt__MPInteger__MPInteger_boolean;
const
OP1_ = 12;
OP2_ = OP1_ + 1;
var op1, op2: MPInteger;
begin
z_init_set_d(op1, OP1_);
z_init_set_d(op2, OP2_);
assert(op1 < op2);
end;
// operator < (op1: MPRational; op2: MPRational): boolean;
procedure TTestGmpOperators.lt__MPRational__MPRational_boolean;
const
OP1_ = 12;
OP2_ = OP1_ + 1;
var op1, op2: MPRational;
begin
q_init(op1);
q_init(op2);
q_set_si(op1, OP1_, 1);
q_set_si(op2, OP2_, 1);
assert(op1 < op2);
end;
// operator <= (op1: MPFloat; op2: MPFloat): boolean;
procedure TTestGmpOperators.le__MPFloat__MPFloat_boolean;
const
OP1_ = 1.2;
OP2_ = OP1_ + 1;
var op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
assert(op1 <= op2);
f_set_d(op2, OP1_);
assert(op1 <= op2);
end;
// operator <= (op1: MPInteger; op2: MPInteger): boolean;
procedure TTestGmpOperators.le__MPInteger__MPInteger_boolean;
const
OP1_ = 12;
OP2_ = OP1_ + 1;
var op1, op2: MPInteger;
begin
z_init_set_ui(op1, OP1_);
z_init_set_ui(op2, OP2_);
assert(op1 <= op2);
z_set_ui(op2, OP1_);
assert(op1 <= op2);
end;
// operator <= (op1: MPRational; op2: MPRational): boolean;
procedure TTestGmpOperators.le__MPRational__MPRational_boolean;
const
OP1_ = 12;
OP2_ = OP1_ + 1;
var op1, op2: MPRational;
begin
q_init(op1);
q_init(op2);
q_set_si(op1, OP1_, 1);
q_set_si(op2, OP2_, 1);
assert(op1 <= op2);
q_set_si(op2, OP1_, 1);
assert(op1 <= op2);
end;
// operator > (op1: MPFloat; op2: MPFloat): boolean;
procedure TTestGmpOperators.gt__MPFloat__MPFloat_boolean;
const
OP1_ = 1.2;
OP2_ = OP1_ - 1;
var op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
assert(op1 > op2);
end;
// operator > (op1: MPInteger; op2: MPInteger): boolean;
procedure TTestGmpOperators.gt__MPInteger__MPInteger_boolean;
const
OP1_ = 12;
OP2_ = OP1_ - 1;
var op1, op2: MPInteger;
begin
z_init_set_d(op1, OP1_);
z_init_set_d(op2, OP2_);
assert(op1 > op2);
end;
// operator > (op1: MPRational; op2: MPRational): boolean;
procedure TTestGmpOperators.gt__MPRational__MPRational_boolean;
const
OP1_ = 12;
OP2_ = OP1_ - 1;
var op1, op2: MPRational;
begin
q_init(op1);
q_init(op2);
q_set_si(op1, OP1_, 1);
q_set_si(op2, OP2_, 1);
assert(op1 > op2);
end;
// operator >= (op1: MPFloat; op2: MPFloat): boolean;
procedure TTestGmpOperators.ge__MPFloat__MPFloat_boolean;
const
OP1_ = 1.2;
OP2_ = OP1_ - 1;
var op1, op2: MPFloat;
begin
f_init_set_d(op1, OP1_);
f_init_set_d(op2, OP2_);
assert(op1 >= op2);
f_set_d(op2, OP1_);
assert(op1 >= op2);
end;
// operator >= (op1: MPInteger; op2: MPInteger): boolean;
procedure TTestGmpOperators.ge__MPInteger__MPInteger_boolean;
const
OP1_ = 12;
OP2_ = OP1_ - 1;
var op1, op2: MPInteger;
begin
z_init_set_ui(op1, OP1_);
z_init_set_ui(op2, OP2_);
assert(op1 >= op2);
z_set_ui(op2, OP1_);
assert(op1 >= op2);
end;
// operator >= (op1: MPRational; op2: MPRational): boolean;
procedure TTestGmpOperators.ge__MPRational__MPRational_boolean;
const
OP1_ = 12;
OP2_ = OP1_ - 1;
var op1, op2: MPRational;
begin
q_init(op1);
q_init(op2);
q_set_si(op1, OP1_, 1);
q_set_si(op2, OP2_, 1);
assert(op1 >= op2);
q_set_si(op2, OP1_, 1);
assert(op1 >= op2);
end;