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

print "1..7\n";

Rmpfi_set_default_prec(50);

my $r = sqrt(2);
my $op = sqrt(Math::MPFI->new(2));
my $rop = Math::MPFI->new();
my $ui = 4;
my $si = - 3;

#print $op, "\n";

if($r == $op) {print "ok 1\n"}
else {
  warn "\$op: $op\n\$r: $r\n";
  print "not ok 1\n";
}

Rmpfi_mul_2exp($rop, $op, $ui);

if($rop == $r * (2 ** $ui)) {print "ok 2\n"}
else {
  warn "\$rop: $rop\n\$r * (2 ** $ui): ", $r * (2 ** $ui), "\n";
  print "not ok 2\n";
}

Rmpfi_mul_2ui($rop, $op, $ui);

if($rop == $r * (2 ** $ui)) {print "ok 3\n"}
else {
  warn "\$rop: $rop\n\$r * (2 ** $ui): ", $r * (2 ** $ui), "\n";
  print "not ok 3\n";
}

Rmpfi_mul_2si($rop, $op, $si);

if($rop == $r * (2 ** $si)) {print "ok 4\n"}
else {
  warn "\$rop: $rop\n\$r * (2 ** $si): ", $r * (2 ** $si), "\n";
  print "not ok 4\n";
}

################################################
################################################

Rmpfi_div_2exp($rop, $op, $ui);

if($rop == $r / (2 ** $ui)) {print "ok 5\n"}
else {
  warn "\$rop: $rop\n\$r / (2 ** $ui): ", $r / (2 ** $ui), "\n";
  print "not ok 5\n";
}

Rmpfi_div_2ui($rop, $op, $ui);

if($rop == $r / (2 ** $ui)) {print "ok 6\n"}
else {
  warn "\$rop: $rop\n\$r / (2 ** $ui): ", $r / (2 ** $ui), "\n";
  print "not ok 6\n";
}

Rmpfi_div_2si($rop, $op, $si);

if($rop == $r / (2 ** $si)) {print "ok 7\n"}
else {
  warn "\$rop: $rop\n\$r / (2 ** $si): ", $r / (2 ** $si), "\n";
  print "not ok 7\n";
}