xref: /openbsd-src/gnu/usr.bin/perl/cpan/bignum/t/infnan-bignum-mbf.t (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
1# -*- mode: perl; -*-
2
3use strict;
4use warnings;
5
6use Test::More tests => 66;
7
8# Default: upgrade => "Math::BigFloat", downgrade => "Math::BigInt";
9use bignum;
10
11my $class = "Math::BigInt";
12my $x;
13
14###############################################################################
15
16note("inf tests");
17
18$x = 1 + inf;
19note("\n\n" . $x . "\n\n");
20
21$x = 1 + inf;
22is(ref($x), $class, "\$x = 1 + inf makes a $class");
23is($x->bstr(), "inf", '$x = 1 + inf; $x->bstr() = "inf"');
24
25$x = 1 * inf;
26is(ref($x), $class, "\$x = 1 * inf makes a $class");
27is($x->bstr(), "inf", '$x = 1 * inf; $x->bstr() = "inf"');
28
29# these don't work without exporting inf()
30$x = inf;
31is(ref($x), $class, "\$x = inf makes a $class");
32is($x->bstr(), "inf", '$x = inf; $x->bstr() = "inf"');
33
34$x = inf + inf;
35is(ref($x), $class, "\$x = inf + inf makes a $class");
36is($x->bstr(), "inf", '$x = inf + inf; $x->bstr() = "inf"');
37
38$x = inf * inf;
39is(ref($x), $class, "\$x = inf * inf makes a $class");
40is($x->bstr(), "inf", '$x = inf * inf; $x->bstr() = "inf"');
41
42###############################################################################
43
44note("NaN tests");
45
46$x = 1 + NaN;
47is(ref($x), $class, "\$x = 1 + NaN makes a $class");
48is($x->bstr(), "NaN", '$x = 1 + NaN; $x->bstr() = "NaN"');
49
50$x = 1 * NaN;
51is(ref($x), $class, "\$x = 1 * NaN makes a $class");
52is($x->bstr(), "NaN", '$x = 1 * NaN; $x->bstr() = "NaN"');
53
54# these don't work without exporting NaN()
55$x = NaN;
56is(ref($x), $class, "\$x = NaN makes a $class");
57is($x->bstr(), "NaN", '$x = NaN; $x->bstr() = "NaN"');
58
59$x = NaN + NaN;
60is(ref($x), $class, "\$x = NaN + NaN makes a $class");
61is($x->bstr(), "NaN", '$x = NaN + NaN; $x->bstr() = "NaN"');
62
63$x = NaN * NaN;
64is(ref($x), $class, "\$x = NaN * NaN makes a $class");
65is($x->bstr(), "NaN", '$x = NaN * NaN; $x->bstr() = "NaN"');
66
67###############################################################################
68
69note("mixed tests");
70
71# these don't work without exporting NaN() or inf()
72
73$x = NaN + inf;
74is(ref($x), $class, "\$x = NaN + inf makes a $class");
75is($x->bstr(), "NaN", '$x = NaN + inf; $x->bstr() = "NaN"');
76
77$x = NaN * inf;
78is(ref($x), $class, "\$x = NaN * inf makes a $class");
79is($x->bstr(), "NaN", '$x = NaN * inf; $x->bstr() = "NaN"');
80
81$x = inf * NaN;
82is(ref($x), $class, "\$x = inf * NaN makes a $class");
83is($x->bstr(), "NaN", '$x = inf * NaN; $x->bstr() = "NaN"');
84
85###############################################################################
86# inf and NaN as strings.
87
88for 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
94for 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}
102