#!perl
use strict;
use warnings;
use Test::More tests => 2602;
my @classes = ('Math::BigRat');
# We should test all the following operators:
#
# & | ^ << >> &= |= ^= <<= >>=
#
# as well as the corresponding methods
#
# band bior bxor blsft brsft
for my $class (@classes) {
use_ok($class);
for my $op (qw( & | ^ )) {
for (my $xscalar = 0 ; $xscalar <= 8 ; $xscalar += 0.5) {
for (my $yscalar = 0 ; $yscalar <= 8 ; $yscalar += 0.5) {
my $xint = int $xscalar;
my $yint = int $yscalar;
my $x = $class -> new("$xscalar");
my $y = $class -> new("$yscalar");
my $test = "$x $op $y";
my $expected = eval "$xscalar $op $yscalar";
my $got = eval "\$x $op \$y";
is($@, '', 'is $@ empty');
isa_ok($got, $class, $test);
is($got, $expected,
"$x $op $y = $xint $op $yint = $expected");
}
}
}
}