integrate Math::BigInt-1.63
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / mbimbf.t
1 #!/usr/bin/perl -w
2
3 # test rounding, accuracy, precicion and fallback, round_mode and mixing
4 # of classes
5
6 use strict;
7 use Test;
8
9 BEGIN
10   {
11   $| = 1;
12   # to locate the testing files
13   my $location = $0; $location =~ s/mbimbf.t//i;
14   if ($ENV{PERL_CORE})
15     {
16     @INC = qw(../lib);          # testing with the core distribution
17     }
18   else
19     {
20     unshift @INC, '../lib';     # for testing manually
21     }
22   if (-d 't')
23     {
24     chdir 't';
25     require File::Spec;
26     unshift @INC, File::Spec->catdir(File::Spec->updir, $location);
27     }
28   else
29     {
30     unshift @INC, $location;
31     }
32   print "# INC = @INC\n";
33
34   plan tests => 669 
35     + 16;               # own tests
36   }
37
38 use Math::BigInt 1.63;
39 use Math::BigFloat 1.38;
40
41 use vars qw/$mbi $mbf/;
42
43 $mbi = 'Math::BigInt';
44 $mbf = 'Math::BigFloat';
45
46 require 'mbimbf.inc';
47
48 # some tests that won't work with subclasses, since the things are only
49 # garantied in the Math::BigInt/BigFloat (unless subclass chooses to support
50 # this)
51
52 Math::BigInt->round_mode('even');       # reset for tests
53 Math::BigFloat->round_mode('even');     # reset for tests
54
55 ok ($Math::BigInt::rnd_mode,'even');
56 ok ($Math::BigFloat::rnd_mode,'even');
57
58 my $x = eval '$mbi->round_mode("huhmbi");';
59 ok ($@ =~ /^Unknown round mode huhmbi at/);
60
61 $x = eval '$mbf->round_mode("huhmbf");';
62 ok ($@ =~ /^Unknown round mode huhmbf at/);
63
64 # old way (now with test for validity)
65 $x = eval '$Math::BigInt::rnd_mode = "huhmbi";';
66 ok ($@ =~ /^Unknown round mode huhmbi at/);
67 $x = eval '$Math::BigFloat::rnd_mode = "huhmbf";';
68 ok ($@ =~ /^Unknown round mode huhmbf at/);
69 # see if accessor also changes old variable
70 $mbi->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
71 $mbf->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
72
73 foreach my $class (qw/Math::BigInt Math::BigFloat/)
74   {
75   ok ($class->accuracy(5),5);           # set A
76   ok_undef ($class->precision());       # and now P must be cleared
77   ok ($class->precision(5),5);          # set P
78   ok_undef ($class->accuracy());        # and now A must be cleared
79   }
80