summaryrefslogtreecommitdiff
path: root/dist/Math-BigRat/t/trap.t
diff options
context:
space:
mode:
Diffstat (limited to 'dist/Math-BigRat/t/trap.t')
-rw-r--r--dist/Math-BigRat/t/trap.t74
1 files changed, 74 insertions, 0 deletions
diff --git a/dist/Math-BigRat/t/trap.t b/dist/Math-BigRat/t/trap.t
new file mode 100644
index 0000000000..2811524a18
--- /dev/null
+++ b/dist/Math-BigRat/t/trap.t
@@ -0,0 +1,74 @@
+#!/usr/bin/perl -w
+
+# test that config ( trap_nan => 1, trap_inf => 1) really works/dies
+
+use strict;
+use Test::More tests => 29;
+
+use Math::BigRat;
+
+my $mbi = 'Math::BigRat';
+my ($cfg,$x);
+
+foreach my $class ($mbi)
+ {
+ # can do and defaults are okay?
+ can_ok ($class, 'config');
+ is ($class->config()->{trap_nan}, 0);
+ is ($class->config()->{trap_inf}, 0);
+
+ # can set?
+ $cfg = $class->config( trap_nan => 1 ); is ($cfg->{trap_nan},1);
+
+ # can set via hash ref?
+ $cfg = $class->config( { trap_nan => 1 } ); is ($cfg->{trap_nan},1);
+
+ # also test that new() still works normally
+ eval ("\$x = \$class->new('42'); \$x->bnan();");
+ like ($@, qr/^Tried to set/);
+ is ($x,42); # after new() never modified
+
+ # can reset?
+ $cfg = $class->config( trap_nan => 0 ); is ($cfg->{trap_nan},0);
+
+ # can set?
+ $cfg = $class->config( trap_inf => 1 ); is ($cfg->{trap_inf},1);
+ eval ("\$x = \$class->new('4711'); \$x->binf();");
+ like ($@, qr/^Tried to set/);
+ is ($x,4711); # after new() never modified
+
+ # +$x/0 => +inf
+ eval ("\$x = \$class->new('4711'); \$x->bdiv(0);");
+ like ($@, qr/^Tried to set/);
+ is ($x,4711); # after new() never modified
+
+ # -$x/0 => -inf
+ eval ("\$x = \$class->new('-0815'); \$x->bdiv(0);");
+ like ($@, qr/^Tried to set/);
+ is ($x,-815); # after new() never modified
+
+ $cfg = $class->config( trap_nan => 1 );
+ # 0/0 => NaN
+ eval ("\$x = \$class->new('0'); \$x->bdiv(0);");
+ like ($@, qr/^Tried to set/);
+ is ($x,0); # after new() never modified
+ }
+
+##############################################################################
+# BigRat
+
+$cfg = Math::BigRat->config( trap_nan => 1 );
+
+for my $trap (qw/0.1a +inf inf -inf/)
+ {
+ my $x = Math::BigRat->new('7/4');
+
+ eval ("\$x = \$mbi->new('$trap');");
+ is ($x,'7/4'); # never modified since it dies
+ eval ("\$x = \$mbi->new('$trap');");
+ is ($x,'7/4'); # never modified since it dies
+ eval ("\$x = \$mbi->new('$trap/7');");
+ is ($x,'7/4'); # never modified since it dies
+ }
+
+# all tests done