This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
bignum 0.22 take 4 (hex()/oct() overloading)
[perl5.git] / lib / bignum / t / bigint.t
1 #!/usr/bin/perl -w
2
3 ###############################################################################
4
5 use Test;
6 use strict;
7
8 BEGIN
9   {
10   $| = 1;
11   chdir 't' if -d 't';
12   unshift @INC, '../lib';
13   plan tests => 51;
14   }
15
16 use bigint qw/hex oct/;
17
18 ###############################################################################
19 # _constant tests
20
21 foreach (qw/ 
22   123:123
23   123.4:123
24   1.4:1
25   0.1:0
26   -0.1:0
27   -1.1:-1
28   -123.4:-123
29   -123:-123
30   123e2:123e2
31   123e-1:12
32   123e-4:0
33   123e-3:0
34   123.345e-1:12
35   123.456e+2:12345
36   1234.567e+3:1234567
37   1234.567e+4:1234567E1
38   1234.567e+6:1234567E3
39   /)
40   {
41   my ($x,$y) = split /:/;
42   print "# Try $x\n";
43   ok (bigint::_float_constant("$x"),"$y");
44   }
45
46 foreach (qw/ 
47   0100:64
48   0200:128
49   0x100:256
50   0b1001:9
51   /)
52   {
53   my ($x,$y) = split /:/;
54   print "# Try $x\n";
55   ok (bigint::_binary_constant("$x"),"$y");
56   }
57
58 ###############################################################################
59 # general tests
60
61 my $x = 5; ok (ref($x) =~ /^Math::BigInt/);             # :constant
62
63 # todo:  ok (2 + 2.5,4.5);                              # should still work
64 # todo: $x = 2 + 3.5; ok (ref($x),'Math::BigFloat');
65
66 $x = 2 ** 255; ok (ref($x) =~ /^Math::BigInt/);
67
68 ok (12->bfac(),479001600);
69 ok (9/4,2);
70
71 ok (4.5+4.5,8);                                 # truncate
72 ok (ref(4.5+4.5) =~ /^Math::BigInt/);
73
74
75 ###############################################################################
76 # accurarcy and precision
77
78 ok_undef (bigint->accuracy());
79 ok (bigint->accuracy(12),12);
80 ok (bigint->accuracy(),12);
81
82 ok_undef (bigint->precision());
83 ok (bigint->precision(12),12);
84 ok (bigint->precision(),12);
85
86 ok (bigint->round_mode(),'even');
87 ok (bigint->round_mode('odd'),'odd');
88 ok (bigint->round_mode(),'odd');
89
90 ###############################################################################
91 # hex() and oct()
92
93 my $c = 'Math::BigInt';
94
95 ok (ref(hex(1)), $c);
96 ok (ref(hex(0x1)), $c);
97 ok (ref(hex("af")), $c);
98 ok (hex("af"), Math::BigInt->new(0xaf));
99 ok (ref(hex("0x1")), $c);
100
101 ok (ref(oct("0x1")), $c);
102 ok (ref(oct("01")), $c);
103 ok (ref(oct("0b01")), $c);
104 ok (ref(oct("1")), $c);
105 ok (ref(oct(" 1")), $c);
106 ok (ref(oct(" 0x1")), $c);
107
108 ok (ref(oct(0x1)), $c);
109 ok (ref(oct(01)), $c);
110 ok (ref(oct(0b01)), $c);
111 ok (ref(oct(1)), $c);
112
113 ###############################################################################
114 ###############################################################################
115 # Perl 5.005 does not like ok ($x,undef)
116
117 sub ok_undef
118   {
119   my $x = shift;
120
121   ok (1,1) and return if !defined $x;
122   ok ($x,'undef');
123   }