This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Math::BigInt from 1.999701 to 1.999704
[perl5.git] / cpan / Math-BigInt / t / mbimbf.t
1 #!/usr/bin/perl -w
2
3 # test rounding, accuracy, precision and fallback, round_mode and mixing
4 # of classes
5
6 use strict;
7 use Test::More tests => 684
8     + 26;               # own tests
9
10 use Math::BigInt lib => 'Calc';
11 use Math::BigFloat;
12
13 use vars qw/$mbi $mbf/;
14
15 $mbi = 'Math::BigInt';
16 $mbf = 'Math::BigFloat';
17
18 require 't/mbimbf.inc';
19
20 # some tests that won't work with subclasses, since the things are only
21 # guaranteed in the Math::BigInt/BigFloat (unless subclass chooses to support
22 # this)
23
24 Math::BigInt->round_mode('even');       # reset for tests
25 Math::BigFloat->round_mode('even');     # reset for tests
26
27 is ($Math::BigInt::rnd_mode,'even');
28 is ($Math::BigFloat::rnd_mode,'even');
29
30 my $x = eval '$mbi->round_mode("huhmbi");';
31 like ($@, qr/^Unknown round mode 'huhmbi' at/);
32
33 $x = eval '$mbf->round_mode("huhmbf");';
34 like ($@, qr/^Unknown round mode 'huhmbf' at/);
35
36 # old way (now with test for validity)
37 $x = eval '$Math::BigInt::rnd_mode = "huhmbi";';
38 like ($@, qr/^Unknown round mode 'huhmbi' at/);
39 $x = eval '$Math::BigFloat::rnd_mode = "huhmbf";';
40 like ($@, qr/^Unknown round mode 'huhmbf' at/);
41 # see if accessor also changes old variable
42 $mbi->round_mode('odd'); is ($Math::BigInt::rnd_mode,'odd');
43 $mbf->round_mode('odd'); is ($Math::BigInt::rnd_mode,'odd');
44
45 foreach my $class (qw/Math::BigInt Math::BigFloat/)
46   {
47   is ($class->accuracy(5),5);           # set A
48   is ($class->precision(), undef);      # and now P must be cleared
49   is ($class->precision(5),5);          # set P
50   is ($class->accuracy(), undef);       # and now A must be cleared
51   }
52
53 foreach my $class (qw/Math::BigInt Math::BigFloat/)
54   {
55   $class->accuracy(42);
56   my $x = $class->new(123);     # $x gets A of 42, too!
57   is ($x->accuracy(),42);       # really?
58   is ($x->accuracy(undef),42);  # $x has no A, but the
59                                 # global is still in effect for $x
60                                 # so the return value of that operation should
61                                 # be 42, not undef
62   is ($x->accuracy(),42);       # so $x should still have A = 42
63   $class->accuracy(undef);      # reset for further tests
64   $class->precision(undef);
65   }
66 # bug with flog(Math::BigFloat,Math::BigInt)
67 $x = Math::BigFloat->new(100);
68 $x = $x->blog(Math::BigInt->new(10));
69
70 is ($x,2);
71
72 # bug until v1.88 for sqrt() with enough digits
73 for my $i (80,88,100)
74   {
75   $x = Math::BigFloat->new("1." . ("0" x $i) . "1");
76   $x = $x->bsqrt;
77   is ($x, 1);
78   }