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