1# -*- mode: perl; -*-
2
3# Test that accuracy() and precision() in BigInt/BigFloat do not disturb
4# the rounding force in BigRat.
5
6use strict;
7use warnings;
8
9use Test::More tests => 17;
10
11use Math::BigInt;
12use Math::BigFloat;
13use Math::BigRat;
14
15my $proper       = Math::BigRat   -> new('12345678901234567890/2');
16my $proper_inc   = Math::BigRat   -> new('12345678901234567890/2') -> binc();
17my $proper_dec   = Math::BigRat   -> new('12345678901234567890/2') -> bdec();
18my $proper_int   = Math::BigInt   -> new('12345678901234567890');
19my $proper_float = Math::BigFloat -> new('12345678901234567890');
20my $proper2      = Math::BigRat   -> new('12345678901234567890');
21
22Math::BigInt   -> accuracy(3);
23Math::BigFloat -> accuracy(5);
24
25my ($x, $y, $z);
26
27##############################################################################
28# new()
29
30note "Test new()";
31
32$z = Math::BigRat->new("12345678901234567890/2");
33is($z, $proper, q|Math::BigRat->new("12345678901234567890/2")|);
34
35$z = Math::BigRat->new("1234567890123456789E1");
36is($z, $proper2, q|Math::BigRat->new("1234567890123456789E1")|);
37
38$z = Math::BigRat->new("12345678901234567890/1E0");
39is($z, $proper2, q|Math::BigRat->new("12345678901234567890/1E0")|);
40
41$z = Math::BigRat->new("1234567890123456789e1/1");
42is($z, $proper2, q|Math::BigRat->new("1234567890123456789e1/1")|);
43
44$z = Math::BigRat->new("1234567890123456789e1/1E0");
45is($z, $proper2, q|Math::BigRat->new("1234567890123456789e1/1E0")|);
46
47$z = Math::BigRat->new($proper_int);
48is($z, $proper2, qq|Math::BigRat->new("$proper_int")|);
49
50$z = Math::BigRat->new($proper_float);
51is($z, $proper2, qq|Math::BigRat->new("$proper_float")|);
52
53##############################################################################
54# bdiv
55
56note "Test bdiv()";
57
58$x = Math::BigRat->new("12345678901234567890");
59$y = Math::BigRat->new("2");
60$z = $x->copy->bdiv($y);
61is($z, $proper);
62
63##############################################################################
64# bmul
65
66note "Test bmul()";
67
68$x = Math::BigRat->new("$proper");
69$y = Math::BigRat->new("1");
70$z = $x->copy->bmul($y);
71is($z, $proper);
72
73$z = Math::BigRat->new("12345678901234567890/1E0");
74is($z, $proper2);
75
76$z = Math::BigRat->new($proper_int);
77is($z, $proper2);
78
79$z = Math::BigRat->new($proper_float);
80is($z, $proper2);
81
82##############################################################################
83# bdiv
84
85note "Test bdiv()";
86
87$x = Math::BigRat->new("12345678901234567890");
88$y = Math::BigRat->new("2");
89$z = $x->copy->bdiv($y);
90is($z, $proper);
91
92##############################################################################
93# bmul
94
95note "Test bmul()";
96
97$x = Math::BigRat->new("$proper");
98$y = Math::BigRat->new("1");
99$z = $x->copy->bmul($y);
100is($z, $proper);
101
102$x = Math::BigRat->new("$proper");
103$y = Math::BigRat->new("2");
104$z = $x->copy->bmul($y);
105is($z, $proper2);
106
107##############################################################################
108# binc
109
110note "Test binc()";
111
112$x = $proper->copy()->binc();
113is($x, $proper_inc);
114
115##############################################################################
116# binc
117
118note "Test bdec()";
119
120$x = $proper->copy()->bdec();
121is($x, $proper_dec);
122