This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Sync bignum with CPAN 0.66
[perl5.git] / cpan / bignum / t / infnan-bignum-mbf.t
1 # -*- mode: perl; -*-
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 66;
7
8 # Default: upgrade => "Math::BigFloat", downgrade => "Math::BigInt";
9 use bignum;
10
11 my $class = "Math::BigInt";
12 my $x;
13
14 ###############################################################################
15
16 note("inf tests");
17
18 $x = 1 + inf;
19 note("\n\n" . $x . "\n\n");
20
21 $x = 1 + inf;
22 is(ref($x), $class, "\$x = 1 + inf makes a $class");
23 is($x->bstr(), "inf", '$x = 1 + inf; $x->bstr() = "inf"');
24
25 $x = 1 * inf;
26 is(ref($x), $class, "\$x = 1 * inf makes a $class");
27 is($x->bstr(), "inf", '$x = 1 * inf; $x->bstr() = "inf"');
28
29 # these don't work without exporting inf()
30 $x = inf;
31 is(ref($x), $class, "\$x = inf makes a $class");
32 is($x->bstr(), "inf", '$x = inf; $x->bstr() = "inf"');
33
34 $x = inf + inf;
35 is(ref($x), $class, "\$x = inf + inf makes a $class");
36 is($x->bstr(), "inf", '$x = inf + inf; $x->bstr() = "inf"');
37
38 $x = inf * inf;
39 is(ref($x), $class, "\$x = inf * inf makes a $class");
40 is($x->bstr(), "inf", '$x = inf * inf; $x->bstr() = "inf"');
41
42 ###############################################################################
43
44 note("NaN tests");
45
46 $x = 1 + NaN;
47 is(ref($x), $class, "\$x = 1 + NaN makes a $class");
48 is($x->bstr(), "NaN", '$x = 1 + NaN; $x->bstr() = "NaN"');
49
50 $x = 1 * NaN;
51 is(ref($x), $class, "\$x = 1 * NaN makes a $class");
52 is($x->bstr(), "NaN", '$x = 1 * NaN; $x->bstr() = "NaN"');
53
54 # these don't work without exporting NaN()
55 $x = NaN;
56 is(ref($x), $class, "\$x = NaN makes a $class");
57 is($x->bstr(), "NaN", '$x = NaN; $x->bstr() = "NaN"');
58
59 $x = NaN + NaN;
60 is(ref($x), $class, "\$x = NaN + NaN makes a $class");
61 is($x->bstr(), "NaN", '$x = NaN + NaN; $x->bstr() = "NaN"');
62
63 $x = NaN * NaN;
64 is(ref($x), $class, "\$x = NaN * NaN makes a $class");
65 is($x->bstr(), "NaN", '$x = NaN * NaN; $x->bstr() = "NaN"');
66
67 ###############################################################################
68
69 note("mixed tests");
70
71 # these don't work without exporting NaN() or inf()
72
73 $x = NaN + inf;
74 is(ref($x), $class, "\$x = NaN + inf makes a $class");
75 is($x->bstr(), "NaN", '$x = NaN + inf; $x->bstr() = "NaN"');
76
77 $x = NaN * inf;
78 is(ref($x), $class, "\$x = NaN * inf makes a $class");
79 is($x->bstr(), "NaN", '$x = NaN * inf; $x->bstr() = "NaN"');
80
81 $x = inf * NaN;
82 is(ref($x), $class, "\$x = inf * NaN makes a $class");
83 is($x->bstr(), "NaN", '$x = inf * NaN; $x->bstr() = "NaN"');
84
85 ###############################################################################
86 # inf and NaN as strings.
87
88 for my $nan (qw/ nan naN nAn nAN Nan NaN NAn NAN /) {
89     my $x = 1 + $nan;
90     is($x->bstr(), "NaN", qq|\$x = 1 + "$nan"|);
91     is(ref($x), $class, "\$x is a $class");
92 }
93
94 for my $inf (qw/ inf inF iNf iNF Inf InF INf INF
95                  infinity Infinity InFiNiTy iNfInItY
96                /)
97 {
98     my $x = 1 + $inf;
99     is($x->bstr(), "inf", qq|\$x = 1 + "$inf"|);
100     is(ref($x), $class, "\$x is a $class");
101 }