Commit | Line | Data |
990fb837 |
1 | #!/usr/bin/perl -w |
2 | |
3 | # test that config ( trap_nan => 1, trap_inf => 1) really works/dies |
4 | |
5 | use strict; |
6 | use Test; |
7 | |
8 | BEGIN |
9 | { |
10 | $| = 1; |
11 | chdir 't' if -d 't'; |
12 | unshift @INC, '../lib'; # for running manually |
13 | plan tests => 29; |
14 | } |
15 | |
16 | use Math::BigRat; |
17 | |
18 | my $mbi = 'Math::BigRat'; |
19 | my ($cfg,$x); |
20 | |
21 | foreach my $class ($mbi) |
22 | { |
23 | # can do and defaults are okay? |
24 | ok ($class->can('config')); |
25 | ok ($class->config()->{trap_nan}, 0); |
26 | ok ($class->config()->{trap_inf}, 0); |
27 | |
28 | # can set? |
29 | $cfg = $class->config( trap_nan => 1 ); ok ($cfg->{trap_nan},1); |
30 | |
31 | # can set via hash ref? |
32 | $cfg = $class->config( { trap_nan => 1 } ); ok ($cfg->{trap_nan},1); |
33 | |
34 | # also test that new() still works normally |
35 | eval ("\$x = \$class->new('42'); \$x->bnan();"); |
36 | ok ($@ =~/^Tried to set/, 1); |
37 | ok ($x,42); # after new() never modified |
38 | |
39 | # can reset? |
40 | $cfg = $class->config( trap_nan => 0 ); ok ($cfg->{trap_nan},0); |
41 | |
42 | # can set? |
43 | $cfg = $class->config( trap_inf => 1 ); ok ($cfg->{trap_inf},1); |
44 | eval ("\$x = \$class->new('4711'); \$x->binf();"); |
45 | ok ($@ =~/^Tried to set/, 1); |
46 | ok ($x,4711); # after new() never modified |
47 | |
48 | # +$x/0 => +inf |
49 | eval ("\$x = \$class->new('4711'); \$x->bdiv(0);"); |
50 | ok ($@ =~/^Tried to set/, 1); |
51 | ok ($x,4711); # after new() never modified |
52 | |
53 | # -$x/0 => -inf |
54 | eval ("\$x = \$class->new('-0815'); \$x->bdiv(0);"); |
55 | ok ($@ =~/^Tried to set/, 1); |
56 | ok ($x,-815); # after new() never modified |
57 | |
58 | $cfg = $class->config( trap_nan => 1 ); |
59 | # 0/0 => NaN |
60 | eval ("\$x = \$class->new('0'); \$x->bdiv(0);"); |
61 | ok ($@ =~/^Tried to set/, 1); |
62 | ok ($x,0); # after new() never modified |
63 | } |
64 | |
65 | ############################################################################## |
66 | # BigRat |
67 | |
68 | $cfg = Math::BigRat->config( trap_nan => 1 ); |
69 | |
70 | for my $trap (qw/0.1a +inf inf -inf/) |
71 | { |
72 | my $x = Math::BigRat->new('7/4'); |
73 | |
74 | eval ("\$x = \$mbi->new('$trap');"); |
75 | print "# Got: $x\n" unless |
76 | ok ($x,'7/4'); # never modified since it dies |
77 | eval ("\$x = \$mbi->new('$trap');"); |
78 | print "# Got: $x\n" unless |
79 | ok ($x,'7/4'); # never modified since it dies |
80 | eval ("\$x = \$mbi->new('$trap/7');"); |
81 | print "# Got: $x\n" unless |
82 | ok ($x,'7/4'); # never modified since it dies |
83 | } |
84 | |
85 | # all tests done |
86 | |