use warnings;
use strict;
use Math::MPFR qw(:mpfr);
use Math::MPFI qw(:mpfi);
my $tests = 16;
print "1..$tests\n";
my $prec = Math::MPFI::_nv_is_float128() ? 113 : Math::MPFI::_required_ldbl_mant_dig();
Rmpfi_set_default_prec($prec);
if(Math::MPFI::_has_longdouble()) {
my $bi = 36028797018964023.1;
my $rop = Math::MPFI->new(2);
$rop = sqrt($rop);
my $fr = Math::MPFR->new(2);
$fr = sqrt($fr);
## Add, Sub
$rop = $rop + $bi;
$fr = $fr + $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 1\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 1\n";
}
$rop += $bi;
$fr += $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 2\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 2\n";
}
$rop -= $bi;
$fr -= $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 3\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 3\n";
}
$rop = $rop - $bi;
$fr = $fr - $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 4\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 4\n";
}
## Mul, Div
$rop = $rop * $bi;
$fr = $fr * $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 5\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 5\n";
}
$rop *= $bi;
$fr *= $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 6\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 6\n";
}
$rop /= $bi;
$fr /= $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 7\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 7\n";
}
$rop = $rop / $bi;
$fr = $fr / $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 8\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 8\n";
}
## Sub, Mul
$rop = $bi - $rop;
$fr = $bi - $fr;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 9\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 9\n";
}
$rop -= $bi;
$fr -= $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 10\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 10\n";
}
$rop *= -1;
$fr *= -1;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 11\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 11\n";
}
$rop = $bi / $rop;
$fr = $bi / $fr;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 12\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 12\n";
}
$rop /= $bi;
$fr /= $bi;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 13\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 13\n";
}
Rmpfi_inv($rop, $rop);
$fr = 1 / $fr;
if(!Rmpfi_cmp_fr($rop, $fr)) {print "ok 14\n"}
else {
warn "\$rop: $rop\n\$fr: $fr\n";
print "not ok 14\n";
}
my $from_NV_1 = Rmpfi_init();
Rmpfi_set_NV($from_NV_1, $bi);
if($from_NV_1 == $bi) {print "ok 15\n"}
else {
warn "\n$from_NV_1 != $bi\n";
print "not ok 15\n";
}
if(Rmpfi_get_NV($from_NV_1) == $bi) {print "ok 16\n"}
else {
warn "\n ", Rmpfi_get_NV($from_NV_1), " != $bi\n";
print "not ok 16\n";
}
} # _has_longdouble
else {
warn "Skipping all tests - Math::MPFI::_has_longdouble() returned false\n";
for(1..$tests) {print "ok $_\n"}
}