Math-BigInt/xt/author/bpi-mbi.t
# -*- mode: perl; -*-
use strict;
use warnings;
use Test::More tests => 24;
use Math::BigInt;
use Scalar::Util qw< refaddr >;
my $x;
################################################################################
note('class method, without upgrading');
$x = Math::BigInt -> bpi();
is($x, '3', '$x = Math::BigInt -> bpi()');
is(ref($x), 'Math::BigInt',
'$x is a Math::BigInt');
$x = Math::BigInt -> bpi(10);
is($x, '3', '$x = Math::BigInt -> bpi(10)');
is(ref($x), 'Math::BigInt',
'$x is a Math::BigInt');
note('class method, with upgrading');
require Math::BigFloat;
Math::BigInt -> upgrade('Math::BigFloat');
# When no accuracy is specified, default accuracy shall be used.
$x = Math::BigInt -> bpi();
is($x, '3.141592653589793238462643383279502884197', '$x = Math::BigInt -> bpi()');
is(ref($x), "Math::BigFloat",
'$x is a Math::BigFloat');
# When accuracy is specified, it shall be used.
$x = Math::BigInt -> bpi(10);
is($x, '3.141592654', '$x = Math::BigInt -> bpi(10)');
is(ref($x), "Math::BigFloat",
'$x is a Math::BigFloat');
################################################################################
Math::BigInt -> upgrade(undef);
note('instance method, without upgrading');
my $y;
$x = Math::BigInt -> new(100);
$y = $x -> bpi();
is($x, '3',
'$x = Math::BigInt -> new(100); $y = $x -> bpi();');
is(ref($x), 'Math::BigInt',
'$x is a Math::BigInt');
is(refaddr($x), refaddr($y), '$x and $y are the same object');
$x = Math::BigInt -> new(100);
$y = $x -> bpi(10);
is($x, '3',
'$x = Math::BigInt -> new(100); $y = $x -> bpi(10);');
is(ref($x), 'Math::BigInt',
'$x is a Math::BigInt');
is(refaddr($x), refaddr($y), '$x and $y are the same object');
note('instance method, with upgrading');
require Math::BigFloat;
Math::BigInt -> upgrade('Math::BigFloat');
# When no accuracy is specified, default accuracy shall be used.
# When upgrading is in effect, a new object is returned.
$x = Math::BigInt -> new(100);
$y = $x -> bpi();
is($x, '100',
'$x = Math::BigInt -> new(100); $y = $x -> bpi();');
is(ref($x), "Math::BigInt",
'$x is a Math::BigInt');
is($y, '3.141592653589793238462643383279502884197',
'$x = Math::BigInt -> new(100); $y = $x -> bpi();');
is(ref($y), "Math::BigFloat",
'$y is a Math::BigFloat');
isnt(refaddr($x), refaddr($y), '$x and $y are not the same object');
# When accuracy is specified, it shall be used.
$x = Math::BigInt -> new(100);
$y = $x -> bpi(10);
is($x, '100',
'$x = Math::BigInt -> new(100); $y = $x -> bpi(10);');
is(ref($x), "Math::BigInt",
'$x is a Math::BigInt');
is($y, '3.141592654',
'$x = Math::BigInt -> new(100); $y = $x -> bpi();');
is(ref($y), "Math::BigFloat",
'$y is a Math::BigFloat');
isnt(refaddr($x), refaddr($y), '$x and $y are not the same object');