#!/usr/bin/perl -w
# test rounding, accuracy, precicion and fallback, round_mode and mixing
# of classes
use strict;
use Test;
BEGIN
{
$| = 1;
# to locate the testing files
my $location = $0; $location =~ s/mbimbf.t//i;
if ($ENV{PERL_CORE})
{
@INC = qw(../lib); # testing with the core distribution
}
else
{
unshift @INC, '../lib'; # for testing manually
}
if (-d 't')
{
chdir 't';
require File::Spec;
unshift @INC, File::Spec->catdir(File::Spec->updir, $location);
}
else
{
unshift @INC, $location;
}
print "# INC = @INC\n";
plan tests => 617
+ 16; # own tests
}
use Math::BigInt 1.60;
use Math::BigFloat 1.35;
use vars qw/$mbi $mbf/;
$mbi = 'Math::BigInt';
$mbf = 'Math::BigFloat';
require 'mbimbf.inc';
# some tests that won't work with subclasses, since the things are only
# garantied in the Math::BigInt/BigFloat (unless subclass chooses to support
# this)
Math::BigInt->round_mode('even'); # reset for tests
Math::BigFloat->round_mode('even'); # reset for tests
ok ($Math::BigInt::rnd_mode,'even');
ok ($Math::BigFloat::rnd_mode,'even');
my $x = eval '$mbi->round_mode("huhmbi");';
ok ($@ =~ /^Unknown round mode huhmbi at/);
$x = eval '$mbf->round_mode("huhmbf");';
ok ($@ =~ /^Unknown round mode huhmbf at/);
# old way (now with test for validity)
$x = eval '$Math::BigInt::rnd_mode = "huhmbi";';
ok ($@ =~ /^Unknown round mode huhmbi at/);
$x = eval '$Math::BigFloat::rnd_mode = "huhmbf";';
ok ($@ =~ /^Unknown round mode huhmbf at/);
# see if accessor also changes old variable
$mbi->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
$mbf->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
foreach my $class (qw/Math::BigInt Math::BigFloat/)
{
ok ($class->accuracy(5),5); # set A
ok_undef ($class->precision()); # and now P must be cleared
ok ($class->precision(5),5); # set P
ok_undef ($class->accuracy()); # and now A must be cleared
}
|