The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Math::GMPz qw(:mpz);

#$| = 1;
print "1..8\n";

print "# Using gmp version ", Math::GMPz::gmp_v(), "\n";

my
 $n1 = '10101010101010101111111111111111111111000000001110101';
my
 $n2 =  '1010101010101010000000000000000000000111111110001010';

my $y = Rmpz_init_set_str($n1, 2);
my $x = Rmpz_init_set_str( $n2, 2);
my $z = Rmpz_init2(45);
my $q = Rmpz_init_set_str('113858109386036422141170669965214409511474201389', 10);
my $r = Rmpz_init();
my $ret;
my $ul = 1009;

Rmpz_set($z, $x);
my
 $zero = Rmpz_cmp($z, $x);
if(Rmpz_cmp($x, $y) == -(Rmpz_cmp($y, $x))
   &&
   $zero == 0)
     {print "ok 1\n"}
else {print "not ok 1\n"}

$ret = Rmpz_cmp_d($x, 12345678.99999012);
if($ret > 0)
     {print "ok 2\n"}
else {print "not ok 2\n"}

$ret = Rmpz_cmp_si($x, -12345);
if($ret > 0)
     {print "ok 3\n"}
else {print "not ok 3\n"}

$ret = Rmpz_cmp_ui($x, 12345);
if($ret > 0)
     {print "ok 4\n"}
else {print "not ok 4\n"}

Rmpz_set($r, $x);
Rmpz_mul_si($r, $r, -1);

if(!Rmpz_cmpabs($r, $x))
     {print "ok 5\n"}
else {print "not ok 5\n"}

my
 $double = 12345678.90123456;
Rmpz_set_d($r, $double);
Rmpz_mul_si($r, $r, -1);
if(Rmpz_cmpabs_d($r, $double) < 0)
     {print "ok 6\n"}
else {print "not ok 6\n"}

Rmpz_set_ui($r, $ul);
Rmpz_mul_si($r, $r, -1);

if(!Rmpz_cmpabs_ui($r, $ul))
     {print "ok 7\n"}
else {print "not ok 7\n"}

if(Rmpz_sgn($r) == -1
   &&
   Rmpz_sgn($x) == 1)
     {print "ok 8\n"}
else {print "not ok 8\n"}