perl
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
cpan/Math-BigInt/t/mbimbf.inc view on Meta::CPAN
${"$mbi\::accuracy"} = 4;
${"$mbi\::precision"} = undef;
is($mbi->new(123456), 123500, qq|$mbi->new(123456) = 123500|); # with A
${"$mbi\::accuracy"} = undef;
${"$mbi\::precision"} = 3;
is($mbi->new(123456), 123000, qq|$mbi->new(123456) = 123000|); # with P
${"$mbf\::accuracy"} = 4;
${"$mbf\::precision"} = undef;
${"$mbi\::precision"} = undef;
is($mbf->new("123.456"), "123.5", qq|$mbf->new("123.456") = 123.5|);
${"$mbf\::accuracy"} = undef;
${"$mbf\::precision"} = -1;
is($mbf->new("123.456"), "123.5", qq|$mbf->new("123.456") = 123.5|);
${"$mbf\::precision"} = undef; # reset
}
###############################################################################
# see if MBI leaves MBF's private parts alone
{
no strict 'refs';
${"$mbi\::precision"} = undef;
${"$mbf\::precision"} = undef;
${"$mbi\::accuracy"} = 4;
${"$mbf\::accuracy"} = undef;
is($mbf->new("123.456"), "123.456", qq|$mbf->new("123.456") = 123.456|);
${"$mbi\::accuracy"} = undef; # reset
}
###############################################################################
# see if setting accuracy/precision actually rounds the number
$x = $mbf->new("123.456");
$x->accuracy(4);
is($x, "123.5", qq|\$x = $mbf->new("123.456"); \$x->accuracy(4)|);
$x = $mbf->new("123.456");
$x->precision(-2);
is($x, "123.46", qq|\$x = $mbf->new("123.456"); \$x->precision(-2)|);
$x = $mbi->new(123456);
$x->accuracy(4);
is($x, 123500, qq|\$x = $mbi->new(123456); \$x->accuracy(4)|);
$x = $mbi->new(123456);
$x->precision(2);
is($x, 123500, qq|\$x = $mbi->new(123456); \$x->precision(2)|);
###############################################################################
# test actual rounding via round()
$x = $mbf->new("123.456");
is($x->copy()->round(5), "123.46",
qq|\$x = $mbf->new("123.456"); \$x->copy()->round(5)|);
is($x->copy()->round(4), "123.5",
qq|\$x = $mbf->new("123.456"); \$x->copy()->round(4)|);
is($x->copy()->round(5, 2), "NaN",
qq|\$x = $mbf->new("123.456"); \$x->copy()->round(5, 2)|);
is($x->copy()->round(undef, -2), "123.46",
qq|\$x = $mbf->new("123.456"); \$x->copy()->round(undef, -2)|);
is($x->copy()->round(undef, 2), 120,
qq|\$x = $mbf->new("123.456"); \$x->copy()->round(undef, 2)|);
$x = $mbi->new("123");
is($x->round(5, 2), "NaN",
qq|\$x = $mbi->new("123"); \$x->round(5, 2)|);
$x = $mbf->new("123.45000");
is($x->copy()->round(undef, -1, "odd"), "123.5",
qq|\$x = $mbf->new("123.45000"); \$x->copy()->round(undef, -1, "odd")|);
# see if rounding is 'sticky'
$x = $mbf->new("123.4567");
$y = $x->copy()->bround(); # no-op since nowhere A or P defined
is($y, 123.4567,
qq|\$x = $mbf->new("123.4567"); \$y = \$x->copy()->bround()|);
$y = $x->copy()->round(5);
is($y->accuracy(), 5,
q|$y = $x->copy()->round(5); $y->accuracy()|);
is($y->precision(), undef, # A has precedence, so P still unset
q|$y = $x->copy()->round(5); $y->precision()|);
$y = $x->copy()->round(undef, 2);
is($y->precision(), 2,
q|$y = $x->copy()->round(undef, 2); $y->precision()|);
is($y->accuracy(), undef, # P has precedence, so A still unset
q|$y = $x->copy()->round(undef, 2); $y->accuracy()|);
# see if setting A clears P and vice versa
$x = $mbf->new("123.4567");
is($x, "123.4567", q|$x = $mbf->new("123.4567")|);
is($x->accuracy(4), 4, q|$x->accuracy(4)|);
is($x->precision(-2), -2, q|$x->precision(-2)|); # clear A
is($x->accuracy(), undef, q|$x->accuracy()|);
$x = $mbf->new("123.4567");
is($x, "123.4567", q|$x = $mbf->new("123.4567")|);
is($x->precision(-2), -2, q|$x->precision(-2)|);
is($x->accuracy(4), 4, q|$x->accuracy(4)|); # clear P
is($x->precision(), undef, q|$x->precision()|);
# does copy work?
$x = $mbf->new(123.456);
$x->accuracy(4);
$x->precision(2);
$z = $x->copy();
is($z->accuracy(), undef, q|$z = $x->copy(); $z->accuracy()|);
is($z->precision(), 2, q|$z = $x->copy(); $z->precision()|);
# does $x->bdiv($y, d) work when $d > div_scale?
$x = $mbf->new("0.008");
$x->accuracy(8);
for my $e (4, 8, 16, 32) {
is(scalar $x->copy()->bdiv(3, $e), "0.002" . ("6" x ($e - 2)) . "7",
qq|\$x->copy()->bdiv(3, $e)|);
}
# does accuracy()/precision work on zeros?
foreach my $class ($mbi, $mbf) {
$x = $class->bzero();
$x->accuracy(5);
is($x->{_a}, 5, qq|\$x = $class->bzero(); \$x->accuracy(5); \$x->{_a}|);
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.504 second using v1.00-cache-2.02-grep-82fe00e-cpan-dad7e4baca0 )