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