xref: /openbsd/gnu/usr.bin/perl/cpan/bignum/t/bigrat.t (revision e5dd7070)
1#!perl
2
3###############################################################################
4
5use strict;
6use warnings;
7
8use Test::More tests => 40;
9
10use bigrat qw/oct hex/;
11
12###############################################################################
13# general tests
14
15my $x = 5;
16like(ref($x), qr/^Math::BigInt/, '$x = 5 makes $x a Math::BigInt'); # :constant
17
18# todo:  is(2 + 2.5, 4.5);				# should still work
19# todo: $x = 2 + 3.5; is(ref($x), 'Math::BigFloat');
20
21$x = 2 ** 255;
22like(ref($x), qr/^Math::BigInt/, '$x = 2 ** 255 makes $x a Math::BigInt');
23
24# see if Math::BigRat constant works
25is(1/3,         '1/3',    qq|1/3 = '1/3'|);
26is(1/4+1/3,     '7/12',   qq|1/4+1/3 = '7/12'|);
27is(5/7+3/7,     '8/7',    qq|5/7+3/7 = '8/7'|);
28
29is(3/7+1,       '10/7',   qq|3/7+1 = '10/7'|);
30is(3/7+1.1,     '107/70', qq|3/7+1.1 = '107/70'|);
31is(3/7+3/7,     '6/7',    qq|3/7+3/7 = '6/7'|);
32
33is(3/7-1,       '-4/7',   qq|3/7-1 = '-4/7'|);
34is(3/7-1.1,     '-47/70', qq|3/7-1.1 = '-47/70'|);
35is(3/7-2/7,     '1/7',    qq|3/7-2/7 = '1/7'|);
36
37# fails ?
38# is(1+3/7, '10/7', qq|1+3/7 = '10/7'|);
39
40is(1.1+3/7,     '107/70', qq|1.1+3/7 = '107/70'|);
41is(3/7*5/7,     '15/49',  qq|3/7*5/7 = '15/49'|);
42is(3/7 / (5/7), '3/5',    qq|3/7 / (5/7) = '3/5'|);
43is(3/7 / 1,     '3/7',    qq|3/7 / 1 = '3/7'|);
44is(3/7 / 1.5,   '2/7',    qq|3/7 / 1.5 = '2/7'|);
45
46###############################################################################
47# accuracy and precision
48
49is(bigrat->accuracy(),        undef, 'get accuracy');
50is(bigrat->accuracy(12),      12,    'set accuracy to 12');
51is(bigrat->accuracy(),        12,    'get accuracy again');
52
53is(bigrat->precision(),       undef, 'get precision');
54is(bigrat->precision(12),     12,    'set precision to 12');
55is(bigrat->precision(),       12,    'get precision again');
56
57is(bigrat->round_mode(),      'even', 'get round mode');
58is(bigrat->round_mode('odd'), 'odd',  'set round mode');
59is(bigrat->round_mode(),      'odd',  'get round mode again');
60
61###############################################################################
62# hex() and oct()
63
64my $class = 'Math::BigInt';
65
66is(ref(hex(1)),      $class, qq|ref(hex(1)) = $class|);
67is(ref(hex(0x1)),    $class, qq|ref(hex(0x1)) = $class|);
68is(ref(hex("af")),   $class, qq|ref(hex("af")) = $class|);
69is(ref(hex("0x1")),  $class, qq|ref(hex("0x1")) = $class|);
70
71is(hex("af"), Math::BigInt->new(0xaf),
72   qq|hex("af") = Math::BigInt->new(0xaf)|);
73
74is(ref(oct("0x1")),  $class, qq|ref(oct("0x1")) = $class|);
75is(ref(oct("01")),   $class, qq|ref(oct("01")) = $class|);
76is(ref(oct("0b01")), $class, qq|ref(oct("0b01")) = $class|);
77is(ref(oct("1")),    $class, qq|ref(oct("1")) = $class|);
78is(ref(oct(" 1")),   $class, qq|ref(oct(" 1")) = $class|);
79is(ref(oct(" 0x1")), $class, qq|ref(oct(" 0x1")) = $class|);
80
81is(ref(oct(0x1)),    $class, qq|ref(oct(0x1)) = $class|);
82is(ref(oct(01)),     $class, qq|ref(oct(01)) = $class|);
83is(ref(oct(0b01)),   $class, qq|ref(oct(0b01)) = $class|);
84is(ref(oct(1)),      $class, qq|ref(oct(1)) = $class|);
85