use Math::BigRat;
-my $mbi = 'Math::BigRat';
-my ($cfg, $x);
+my $mbr = 'Math::BigRat';
+my $x;
-foreach my $class ($mbi) {
+foreach my $class ($mbr) {
- # can do and defaults are okay?
+ # can do?
can_ok($class, 'config');
- is($class->config()->{trap_nan}, 0, qq|$class->config()->{trap_nan}|);
- is($class->config()->{trap_inf}, 0, qq|$class->config()->{trap_inf}|);
+
+ ###########################################################################
+ # Default values.
+ ###########################################################################
+
+ # defaults are okay?
+ is($class->config("trap_nan"), 0, qq|$class->config("trap_nan")|);
+ is($class->config("trap_inf"), 0, qq|$class->config("trap_inf")|);
+
+ ###########################################################################
+ # Trap NaN.
+ ###########################################################################
# can set?
- $cfg = $class->config( trap_nan => 1 );
- is($cfg->{trap_nan}, 1, q|$cfg->{trap_nan}|);
+ $class->config( trap_nan => 1 );
+ is($class->config("trap_nan"), 1, q|$class->config("trap_nan")|);
+
+ # can reset?
+ $class->config( trap_nan => 0 );
+ is($class->config("trap_nan"), 0, qq|$class->config("trap_nan")|);
# can set via hash ref?
- $cfg = $class->config( { trap_nan => 1 } );
- is($cfg->{trap_nan}, 1, q|$cfg->{trap_nan}|);
+ $class->config( { trap_nan => 1 } );
+ is($class->config("trap_nan"), 1, q|$class->config("trap_nan")|);
# also test that new() still works normally
- eval("\$x = $class->new('42'); \$x->bnan();");
- like($@, qr/^Tried to set/, "\$x = $class->new('42'); \$x->bnan();");
+ eval { $x = $class->new("42"); $x->bnan(); };
+ like($@, qr/^Tried to set/, qq|\$x = $class->new("42"); \$x->bnan();|);
# after new() never modified
- is($x, 42, "\$x = $class->new('42'); \$x->bnan();");
+ is($x, 42, qq|\$x = $class->new("42"); \$x->bnan();|);
- # can reset?
- $cfg = $class->config( trap_nan => 0 );
- is($cfg->{trap_nan}, 0, q|$cfg->{trap_nan}|);
+ # 0/0 => NaN
+ eval { $x = $class->new("0"); $x->bdiv(0); };
+ like($@, qr/^Tried to set/, qq|\$x = $class->new("0"); \$x->bdiv(0);|);
+ # after new() never modified
+ is($x, 0, qq|\$x = $class->new("0"); \$x->bdiv(0);|);
+
+ ###########################################################################
+ # Trap inf.
+ ###########################################################################
# can set?
- $cfg = $class->config( trap_inf => 1 );
- is($cfg->{trap_inf}, 1, q|$cfg->{trap_inf}|);
- eval("\$x = $class->new('4711'); \$x->binf();");
- like($@, qr/^Tried to set/, "\$x = $class->new('4711'); \$x->binf();");
+ $class->config( trap_inf => 1 );
+ is($class->config("trap_inf"), 1, qq|$class->config("trap_inf")|);
+
+ eval { $x = $class->new("4711"); $x->binf(); };
+ like($@, qr/^Tried to set/, qq|\$x = $class->new("4711"); \$x->binf();|);
# after new() never modified
- is($x, 4711, "\$x = $class->new('4711'); \$x->binf();");
+ is($x, 4711, qq|\$x = $class->new("4711"); \$x->binf();|);
# +$x/0 => +inf
- eval("\$x =\$class->new('4711'); \$x->bdiv(0);");
- like($@, qr/^Tried to set/, "\$x =\$class->new('4711'); \$x->bdiv(0);");
+ eval { $x = $class->new("4711"); $x->bdiv(0); };
+ like($@, qr/^Tried to set/, qq|\$x =\$class->new("4711"); \$x->bdiv(0);|);
# after new() never modified
- is($x, 4711, "\$x =\$class->new('4711'); \$x->bdiv(0);");
+ is($x, 4711, qq|\$x =\$class->new("4711"); \$x->bdiv(0);|);
# -$x/0 => -inf
- eval("\$x = $class->new('-0815'); \$x->bdiv(0);");
- like($@, qr/^Tried to set/, "\$x = $class->new('-0815'); \$x->bdiv(0);");
- # after new() never modified
- is($x, -815, "\$x = $class->new('-0815'); \$x->bdiv(0);");
-
- $cfg = $class->config( trap_nan => 1 );
- # 0/0 => NaN
- eval("\$x = $class->new('0'); \$x->bdiv(0);");
- like($@, qr/^Tried to set/, "\$x = $class->new('0'); \$x->bdiv(0);");
+ eval { $x = $class->new("-0815"); $x->bdiv(0); };
+ like($@, qr/^Tried to set/, qq|\$x = $class->new("-0815"); \$x->bdiv(0);|);
# after new() never modified
- is($x, 0, "\$x = $class->new('0'); \$x->bdiv(0);");
+ is($x, -815, qq|\$x = $class->new("-0815"); \$x->bdiv(0);|);
}
##############################################################################
# In each of the cases below, $x is not modified, because the code dies.
- eval("\$x = $mbi->new('$trap');");
- is($x, '7/4', "\$x = $mbi->new('$trap');");
+ eval { $x = $mbr->new("$trap"); };
+ is($x, "7/4", qq|\$x = $mbr->new("$trap");|);
- eval("\$x = $mbi->new('$trap');");
- is($x, '7/4', "\$x = $mbi->new('$trap');");
+ eval { $x = $mbr->new("$trap"); };
+ is($x, "7/4", qq|\$x = $mbr->new("$trap");|);
- eval("\$x = $mbi->new('$trap/7');");
- is($x, '7/4', "\$x = $mbi->new('$trap/7');");
+ eval { $x = $mbr->new("$trap/7"); };
+ is($x, "7/4", qq|\$x = $mbr->new("$trap/7");|);
}
# all tests done