File: bpi-mbi.t

package info (click to toggle)
perl 5.36.0-7%2Bdeb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 120,064 kB
  • sloc: ansic: 650,199; perl: 478,052; sh: 70,710; pascal: 8,435; xml: 2,428; yacc: 1,230; makefile: 1,175; cpp: 208; lisp: 1
file content (103 lines) | stat: -rw-r--r-- 2,790 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# -*- 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');