Upgrade to prereleases of Math::BigInt 1.70 and
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / mbimbf.t
CommitLineData
58cde26e 1#!/usr/bin/perl -w
2
ee15d750 3# test rounding, accuracy, precicion and fallback, round_mode and mixing
4# of classes
58cde26e 5
6use strict;
7use Test;
8
61f5c3f5 9BEGIN
58cde26e 10 {
11 $| = 1;
61f5c3f5 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
9b924220 34 plan tests => 684
93c87d9d 35 + 23; # own tests
ee15d750 36 }
37
9b924220 38use Math::BigInt 1.70;
39use Math::BigFloat 1.43;
ee15d750 40
61f5c3f5 41use vars qw/$mbi $mbf/;
ee15d750 42
61f5c3f5 43$mbi = 'Math::BigInt';
44$mbf = 'Math::BigFloat';
58cde26e 45
61f5c3f5 46require 'mbimbf.inc';
58cde26e 47
61f5c3f5 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)
58cde26e 51
61f5c3f5 52Math::BigInt->round_mode('even'); # reset for tests
53Math::BigFloat->round_mode('even'); # reset for tests
58cde26e 54
027dc388 55ok ($Math::BigInt::rnd_mode,'even');
56ok ($Math::BigFloat::rnd_mode,'even');
57
61f5c3f5 58my $x = eval '$mbi->round_mode("huhmbi");';
990fb837 59print "# Got '$@'\n" unless
60 ok ($@ =~ /^Unknown round mode 'huhmbi' at/);
dccbb853 61
61f5c3f5 62$x = eval '$mbf->round_mode("huhmbf");';
990fb837 63print "# Got '$@'\n" unless
64 ok ($@ =~ /^Unknown round mode 'huhmbf' at/);
ee15d750 65
027dc388 66# old way (now with test for validity)
67$x = eval '$Math::BigInt::rnd_mode = "huhmbi";';
990fb837 68print "# Got '$@'\n" unless
69 ok ($@ =~ /^Unknown round mode 'huhmbi' at/);
61f5c3f5 70$x = eval '$Math::BigFloat::rnd_mode = "huhmbf";';
990fb837 71print "# Got '$@'\n" unless
72 ok ($@ =~ /^Unknown round mode 'huhmbf' at/);
027dc388 73# see if accessor also changes old variable
61f5c3f5 74$mbi->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
75$mbf->round_mode('odd'); ok ($Math::BigInt::rnd_mode,'odd');
58cde26e 76
b3abae2a 77foreach my $class (qw/Math::BigInt Math::BigFloat/)
78 {
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
83 }
84
990fb837 85foreach my $class (qw/Math::BigInt Math::BigFloat/)
86 {
87 $class->accuracy(42);
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
93 # be 42, not undef
94 ok ($x->accuracy(),42); # so $x should still have A = 42
93c87d9d 95 $class->accuracy(undef); # reset for further tests
96 $class->precision(undef);
990fb837 97 }
93c87d9d 98# bug with flog(Math::BigFloat,Math::BigInt)
99$x = Math::BigFloat->new(100);
100$x = $x->blog(Math::BigInt->new(10));
101
102ok ($x,2);