diff options
Diffstat (limited to 'lib/Math/BigInt/t/inf_nan.t')
-rw-r--r-- | lib/Math/BigInt/t/inf_nan.t | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/lib/Math/BigInt/t/inf_nan.t b/lib/Math/BigInt/t/inf_nan.t new file mode 100644 index 0000000000..38ebe0365f --- /dev/null +++ b/lib/Math/BigInt/t/inf_nan.t @@ -0,0 +1,255 @@ +#!/usr/bin/perl -w + +use Test; +use strict; + +BEGIN + { + $| = 1; + plan tests => 7*6*4; + chdir 't' if -d 't'; + unshift @INC, '../lib'; + } + +use Math::BigInt; + +my (@args,$x,$y,$z); + +# + +foreach (qw/ + -inf:-inf:-inf + -1:-inf:-inf + -0:-inf:-inf + 0:-inf:-inf + 1:-inf:-inf + inf:-inf:NaN + NaN:-inf:NaN + + -inf:-1:-inf + -1:-1:-2 + -0:-1:-1 + 0:-1:-1 + 1:-1:0 + inf:-1:inf + NaN:-1:NaN + + -inf:0:-inf + -1:0:-1 + -0:0:0 + 0:0:0 + 1:0:1 + inf:0:inf + NaN:0:NaN + + -inf:1:-inf + -1:1:0 + -0:1:1 + 0:1:1 + 1:1:2 + inf:1:inf + NaN:1:NaN + + -inf:inf:NaN + -1:inf:inf + -0:inf:inf + 0:inf:inf + 1:inf:inf + inf:inf:inf + NaN:inf:NaN + + -inf:NaN:NaN + -1:NaN:NaN + -0:NaN:NaN + 0:NaN:NaN + 1:NaN:NaN + inf:NaN:NaN + NaN:NaN:NaN + /) + { + @args = split /:/,$_; + $x = Math::BigInt->new($args[0]); + $y = Math::BigInt->new($args[1]); + $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 + print "# $args[0] + $args[1] should be $args[2] but is ",$x->bstr(),"\n" + if !ok ($x->badd($y)->bstr(),$args[2]); + } + +# - +foreach (qw/ + -inf:-inf:NaN + -1:-inf:inf + -0:-inf:inf + 0:-inf:inf + 1:-inf:inf + inf:-inf:inf + NaN:-inf:NaN + + -inf:-1:-inf + -1:-1:0 + -0:-1:1 + 0:-1:1 + 1:-1:2 + inf:-1:inf + NaN:-1:NaN + + -inf:0:-inf + -1:0:-1 + -0:0:-0 + 0:0:0 + 1:0:1 + inf:0:inf + NaN:0:NaN + + -inf:1:-inf + -1:1:-2 + -0:1:-1 + 0:1:-1 + 1:1:0 + inf:1:inf + NaN:1:NaN + + -inf:inf:-inf + -1:inf:-inf + -0:inf:-inf + 0:inf:-inf + 1:inf:-inf + inf:inf:NaN + NaN:inf:NaN + + -inf:NaN:NaN + -1:NaN:NaN + -0:NaN:NaN + 0:NaN:NaN + 1:NaN:NaN + inf:NaN:NaN + NaN:NaN:NaN + /) + { + @args = split /:/,$_; + $x = Math::BigInt->new($args[0]); + $y = Math::BigInt->new($args[1]); + $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 + print "# $args[0] - $args[1] should be $args[2] but is $x\n" + if !ok ($x->bsub($y)->bstr(),$args[2]); + } + +# * +foreach (qw/ + -inf:-inf:inf + -1:-inf:inf + -0:-inf:NaN + 0:-inf:NaN + 1:-inf:-inf + inf:-inf:-inf + NaN:-inf:NaN + + -inf:-1:inf + -1:-1:1 + -0:-1:0 + 0:-1:-0 + 1:-1:-1 + inf:-1:-inf + NaN:-1:NaN + + -inf:0:NaN + -1:0:-0 + -0:0:-0 + 0:0:0 + 1:0:0 + inf:0:NaN + NaN:0:NaN + + -inf:1:-inf + -1:1:-1 + -0:1:-0 + 0:1:0 + 1:1:1 + inf:1:inf + NaN:1:NaN + + -inf:inf:-inf + -1:inf:-inf + -0:inf:NaN + 0:inf:NaN + 1:inf:inf + inf:inf:inf + NaN:inf:NaN + + -inf:NaN:NaN + -1:NaN:NaN + -0:NaN:NaN + 0:NaN:NaN + 1:NaN:NaN + inf:NaN:NaN + NaN:NaN:NaN + /) + { + @args = split /:/,$_; + $x = Math::BigInt->new($args[0]); + $y = Math::BigInt->new($args[1]); + $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 + print "# $args[0] * $args[1] should be $args[2] but is $x\n" + if !ok ($x->bmul($y)->bstr(),$args[2]); + } + +# / +foreach (qw/ + -inf:-inf:NaN + -1:-inf:0 + -0:-inf:0 + 0:-inf:-0 + 1:-inf:-0 + inf:-inf:NaN + NaN:-inf:NaN + + -inf:-1:inf + -1:-1:1 + -0:-1:0 + 0:-1:-0 + 1:-1:-1 + inf:-1:-inf + NaN:-1:NaN + + -inf:0:-inf + -1:0:-inf + -0:0:NaN + 0:0:NaN + 1:0:inf + inf:0:inf + NaN:0:NaN + + -inf:1:-inf + -1:1:-1 + -0:1:-0 + 0:1:0 + 1:1:1 + inf:1:inf + NaN:1:NaN + + -inf:inf:NaN + -1:inf:-0 + -0:inf:-0 + 0:inf:0 + 1:inf:0 + inf:inf:NaN + NaN:inf:NaN + + -inf:NaN:NaN + -1:NaN:NaN + -0:NaN:NaN + 0:NaN:NaN + 1:NaN:NaN + inf:NaN:NaN + NaN:NaN:NaN + /) + { + @args = split /:/,$_; + $x = Math::BigInt->new($args[0]); + $y = Math::BigInt->new($args[1]); + $args[2] = '0' if $args[2] eq '-0'; # BigInt hasn't got -0 + print "# $args[0] / $args[1] should be $args[2] but is $x\n" + if !ok ($x->bdiv($y)->bstr(),$args[2]); + + } + + |