3 # test rounding, accuracy, precicion and fallback, round_mode and mixing
12 # to locate the testing files
13 my $location = $0; $location =~ s/mbimbf.t//i;
16 @INC = qw(../lib); # testing with the core distribution
20 unshift @INC, '../lib'; # for testing manually
26 unshift @INC, File::Spec->catdir(File::Spec->updir, $location);
30 unshift @INC, $location;
32 print "# INC = @INC\n";
38 use Math::BigInt 1.70;
39 use Math::BigFloat 1.43;
41 use vars qw/$mbi $mbf/;
43 $mbi = 'Math::BigInt';
44 $mbf = 'Math::BigFloat';
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
52 Math::BigInt->round_mode('even'); # reset for tests
53 Math::BigFloat->round_mode('even'); # reset for tests
55 ok ($Math::BigInt::rnd_mode,'even');
56 ok ($Math::BigFloat::rnd_mode,'even');
58 my $x = eval '$mbi->round_mode("huhmbi");';
59 print "# Got '$@'\n" unless
60 ok ($@ =~ /^Unknown round mode 'huhmbi' at/);
62 $x = eval '$mbf->round_mode("huhmbf");';
63 print "# Got '$@'\n" unless
64 ok ($@ =~ /^Unknown round mode 'huhmbf' at/);
66 # old way (now with test for validity)
67 $x = eval '$Math::BigInt::rnd_mode = "huhmbi";';
68 print "# Got '$@'\n" unless
69 ok ($@ =~ /^Unknown round mode 'huhmbi' at/);
70 $x = eval '$Math::BigFloat::rnd_mode = "huhmbf";';
71 print "# Got '$@'\n" unless
72 ok ($@ =~ /^Unknown round mode 'huhmbf' at/);
73 # see if accessor also changes old variable
74 $mbi->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
75 $mbf->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
77 foreach my $class (qw/Math::BigInt Math::BigFloat/)
79 ok ($class->accuracy(5),5); # set A
80 ok_undef ($class->precision()); # and now P must be cleared
81 ok ($class->precision(5),5); # set P
82 ok_undef ($class->accuracy()); # and now A must be cleared
85 foreach my $class (qw/Math::BigInt Math::BigFloat/)
88 my $x = $class->new(123); # $x gets A of 42, too!
89 ok ($x->accuracy(),42); # really?
90 ok ($x->accuracy(undef),42); # $x has no A, but the
91 # global is still in effect for $x
92 # so the return value of that operation should
94 ok ($x->accuracy(),42); # so $x should still have A = 42
95 $class->accuracy(undef); # reset for further tests
96 $class->precision(undef);
98 # bug with flog(Math::BigFloat,Math::BigInt)
99 $x = Math::BigFloat->new(100);
100 $x = $x->blog(Math::BigInt->new(10));