This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move Math::BigRat from ext/ to cpan/
[perl5.git] / cpan / Math-BigRat / t / biglog.t
CommitLineData
116a1b2f
SP
1#!/usr/bin/perl -w
2
3# Test blog function (and bpow, since it uses blog), as well as bexp().
4
5use Test::More;
6use strict;
7
8BEGIN
9 {
10 $| = 1;
11 # to locate the testing files
12 my $location = $0; $location =~ s/biglog.t//i;
13 if ($ENV{PERL_CORE})
14 {
15 # testing with the core distribution
16 @INC = qw(../lib);
17 }
18 unshift @INC, '../lib';
19 if (-d 't')
20 {
21 chdir 't';
22 require File::Spec;
23 unshift @INC, File::Spec->catdir(File::Spec->updir, $location);
24 }
25 else
26 {
27 unshift @INC, $location;
28 }
29 print "# INC = @INC\n";
30
4de3d162 31 plan tests => 17;
116a1b2f
SP
32 }
33
34use Math::BigRat;
35
36my $cl = "Math::BigRat";
37
38#############################################################################
39# test log($n)
40
41# does not work yet
42#is ($cl->new(2)->blog(), '0', "blog(2)");
43#is ($cl->new(288)->blog(), '5',"blog(288)");
44#is ($cl->new(2000)->blog(), '7', "blog(2000)");
45
46#############################################################################
47# test exp($n)
48
49is ($cl->new(1)->bexp()->as_int(), '2', "bexp(1)");
50is ($cl->new(2)->bexp()->as_int(), '7',"bexp(2)");
51is ($cl->new(3)->bexp()->as_int(), '20', "bexp(3)");
52
53# rounding not implemented yet
54#is ($cl->new(3)->bexp(10), '20', "bexp(3,10)");
55
56# $x < 0 => NaN
57ok ($cl->new(-2)->blog(), 'NaN');
58ok ($cl->new(-1)->blog(), 'NaN');
59ok ($cl->new(-10)->blog(), 'NaN');
60ok ($cl->new(-2,2)->blog(), 'NaN');
61
62#############################################################################
63# test bexp() with cached results
64
65is ($cl->new(1)->bexp(),
66 '90933395208605785401971970164779391644753259799242' . '/' .
67 '33452526613163807108170062053440751665152000000000',
68 'bexp(1)');
4de3d162 69is ($cl->new(2)->bexp(1,40), $cl->new(1)->bexp(1,45)->bpow(2,40), 'bexp(2)');
116a1b2f 70
4de3d162 71is ($cl->new("12.5")->bexp(1,61), $cl->new(1)->bexp(1,65)->bpow(12.5,61), 'bexp(12.5)');
116a1b2f
SP
72
73#############################################################################
74# test bexp() with big values (non-cached)
75
4de3d162
T
76is ($cl->new(1)->bexp(1,100)->as_float(100),
77 '2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427',
78 'bexp(100)');
116a1b2f 79
4de3d162 80is ($cl->new("12.5")->bexp(1,91), $cl->new(1)->bexp(1,95)->bpow(12.5,91),
116a1b2f
SP
81 'bexp(12.5) to 91 digits');
82
83#############################################################################
84# some integer results
85is ($cl->new(2)->bpow(32)->blog(2), '32', "2 ** 32");
86is ($cl->new(3)->bpow(32)->blog(3), '32', "3 ** 32");
87is ($cl->new(2)->bpow(65)->blog(2), '65', "2 ** 65");
88
89my $x = Math::BigInt->new( '777' ) ** 256;
90my $base = Math::BigInt->new( '12345678901234' );
91is ($x->copy()->blog($base), 56, 'blog(777**256, 12345678901234)');
92
93$x = Math::BigInt->new( '777' ) ** 777;
94$base = Math::BigInt->new( '777' );
95is ($x->copy()->blog($base), 777, 'blog(777**777, 777)');
96
97# all done
981;
99