1*eac174f2Safresh1# -*- mode: perl; -*- 2b8851fccSafresh1 3b8851fccSafresh1# test that config( trap_nan => 1, trap_inf => 1) really works/dies 4b8851fccSafresh1 5b8851fccSafresh1use strict; 6b8851fccSafresh1use warnings; 7b8851fccSafresh1 8b8851fccSafresh1use Test::More tests => 29; 9b8851fccSafresh1 10b8851fccSafresh1use Math::BigRat; 11b8851fccSafresh1 12b46d8ef2Safresh1my $mbr = 'Math::BigRat'; 13b46d8ef2Safresh1my $x; 14b8851fccSafresh1 15b46d8ef2Safresh1foreach my $class ($mbr) { 169f11ffb7Safresh1 17b46d8ef2Safresh1 # can do? 18b8851fccSafresh1 can_ok($class, 'config'); 19b46d8ef2Safresh1 20b46d8ef2Safresh1 ########################################################################### 21b46d8ef2Safresh1 # Default values. 22b46d8ef2Safresh1 ########################################################################### 23b46d8ef2Safresh1 24b46d8ef2Safresh1 # defaults are okay? 25b46d8ef2Safresh1 is($class->config("trap_nan"), 0, qq|$class->config("trap_nan")|); 26b46d8ef2Safresh1 is($class->config("trap_inf"), 0, qq|$class->config("trap_inf")|); 27b46d8ef2Safresh1 28b46d8ef2Safresh1 ########################################################################### 29b46d8ef2Safresh1 # Trap NaN. 30b46d8ef2Safresh1 ########################################################################### 31b8851fccSafresh1 32b8851fccSafresh1 # can set? 33b46d8ef2Safresh1 $class->config( trap_nan => 1 ); 34b46d8ef2Safresh1 is($class->config("trap_nan"), 1, q|$class->config("trap_nan")|); 35b8851fccSafresh1 36b8851fccSafresh1 # can reset? 37b46d8ef2Safresh1 $class->config( trap_nan => 0 ); 38b46d8ef2Safresh1 is($class->config("trap_nan"), 0, qq|$class->config("trap_nan")|); 39b46d8ef2Safresh1 40b46d8ef2Safresh1 # can set via hash ref? 41b46d8ef2Safresh1 $class->config( { trap_nan => 1 } ); 42b46d8ef2Safresh1 is($class->config("trap_nan"), 1, q|$class->config("trap_nan")|); 43b46d8ef2Safresh1 44b46d8ef2Safresh1 # also test that new() still works normally 45b46d8ef2Safresh1 eval { $x = $class->new("42"); $x->bnan(); }; 46b46d8ef2Safresh1 like($@, qr/^Tried to set/, qq|\$x = $class->new("42"); \$x->bnan();|); 47b46d8ef2Safresh1 # after new() never modified 48b46d8ef2Safresh1 is($x, 42, qq|\$x = $class->new("42"); \$x->bnan();|); 49b46d8ef2Safresh1 50b46d8ef2Safresh1 # 0/0 => NaN 51b46d8ef2Safresh1 eval { $x = $class->new("0"); $x->bdiv(0); }; 52b46d8ef2Safresh1 like($@, qr/^Tried to set/, qq|\$x = $class->new("0"); \$x->bdiv(0);|); 53b46d8ef2Safresh1 # after new() never modified 54b46d8ef2Safresh1 is($x, 0, qq|\$x = $class->new("0"); \$x->bdiv(0);|); 55b46d8ef2Safresh1 56b46d8ef2Safresh1 ########################################################################### 57b46d8ef2Safresh1 # Trap inf. 58b46d8ef2Safresh1 ########################################################################### 59b8851fccSafresh1 60b8851fccSafresh1 # can set? 61b46d8ef2Safresh1 $class->config( trap_inf => 1 ); 62b46d8ef2Safresh1 is($class->config("trap_inf"), 1, qq|$class->config("trap_inf")|); 63b46d8ef2Safresh1 64b46d8ef2Safresh1 eval { $x = $class->new("4711"); $x->binf(); }; 65b46d8ef2Safresh1 like($@, qr/^Tried to set/, qq|\$x = $class->new("4711"); \$x->binf();|); 669f11ffb7Safresh1 # after new() never modified 67b46d8ef2Safresh1 is($x, 4711, qq|\$x = $class->new("4711"); \$x->binf();|); 68b8851fccSafresh1 69b8851fccSafresh1 # +$x/0 => +inf 70b46d8ef2Safresh1 eval { $x = $class->new("4711"); $x->bdiv(0); }; 71b46d8ef2Safresh1 like($@, qr/^Tried to set/, qq|\$x =\$class->new("4711"); \$x->bdiv(0);|); 729f11ffb7Safresh1 # after new() never modified 73b46d8ef2Safresh1 is($x, 4711, qq|\$x =\$class->new("4711"); \$x->bdiv(0);|); 74b8851fccSafresh1 75b8851fccSafresh1 # -$x/0 => -inf 76b46d8ef2Safresh1 eval { $x = $class->new("-0815"); $x->bdiv(0); }; 77b46d8ef2Safresh1 like($@, qr/^Tried to set/, qq|\$x = $class->new("-0815"); \$x->bdiv(0);|); 789f11ffb7Safresh1 # after new() never modified 79b46d8ef2Safresh1 is($x, -815, qq|\$x = $class->new("-0815"); \$x->bdiv(0);|); 80b8851fccSafresh1} 81b8851fccSafresh1 82b8851fccSafresh1############################################################################## 83b8851fccSafresh1# BigRat 84b8851fccSafresh1 859f11ffb7Safresh1Math::BigRat->config(trap_nan => 1, 869f11ffb7Safresh1 trap_inf => 1); 87b8851fccSafresh1 889f11ffb7Safresh1for my $trap (qw/ 0.1a +inf inf -inf /) { 89b8851fccSafresh1 my $x = Math::BigRat->new('7/4'); 90b8851fccSafresh1 919f11ffb7Safresh1 note(""); # this is just for some space in the output 929f11ffb7Safresh1 939f11ffb7Safresh1 # In each of the cases below, $x is not modified, because the code dies. 949f11ffb7Safresh1 95b46d8ef2Safresh1 eval { $x = $mbr->new("$trap"); }; 96b46d8ef2Safresh1 is($x, "7/4", qq|\$x = $mbr->new("$trap");|); 979f11ffb7Safresh1 98b46d8ef2Safresh1 eval { $x = $mbr->new("$trap"); }; 99b46d8ef2Safresh1 is($x, "7/4", qq|\$x = $mbr->new("$trap");|); 1009f11ffb7Safresh1 101b46d8ef2Safresh1 eval { $x = $mbr->new("$trap/7"); }; 102b46d8ef2Safresh1 is($x, "7/4", qq|\$x = $mbr->new("$trap/7");|); 103b8851fccSafresh1} 104b8851fccSafresh1 105b8851fccSafresh1# all tests done 106