[svn:parrot] r40749 - trunk/t/op

dukeleto at svn.parrot.org dukeleto at svn.parrot.org
Mon Aug 24 07:56:50 UTC 2009


Author: dukeleto
Date: Mon Aug 24 07:56:48 2009
New Revision: 40749
URL: https://trac.parrot.org/parrot/changeset/40749

Log:
[t] Many tests for Inf/NaN

Added:
   trunk/t/op/inf_nan.t
Modified:
   trunk/t/op/arithmetics.t

Modified: trunk/t/op/arithmetics.t
==============================================================================
--- trunk/t/op/arithmetics.t	Mon Aug 24 02:23:10 2009	(r40748)
+++ trunk/t/op/arithmetics.t	Mon Aug 24 07:56:48 2009	(r40749)
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 31;
+use Parrot::Test tests => 21;
 
 # test for GMP
 use Parrot::Config;
@@ -594,213 +594,6 @@
 OUTPUT
 }
 
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - basic arith" );
-.sub 'test' :main
-    $N0 = 'Inf'
-    say $N0
-    $N0 -= $N0
-    say $N0
-    $N0 *= -1
-    say $N0
-    $N0 *= 0
-    say $N0
-    $N0 += 5
-    say $N0
-    $N0 -= 42
-    say $N0
-.end
-CODE
-Inf
-NaN
-NaN
-NaN
-NaN
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - exp" );
-.sub 'test' :main
-    $N0 = 'Inf'
-    $N1 = exp $N0
-    say $N1
-    $N0 = '-Inf'
-    $N1 = exp $N0
-    say $N1
-    $N0 = 'NaN'
-    $N1 = exp $N0
-    say $N1
-.end
-CODE
-Inf
-0
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - sin" );
-.sub 'test' :main
-    $N0 = 'Inf'
-    $N1 = sin $N0
-    say $N1
-    $N0 = '-Inf'
-    $N1 = sin $N0
-    say $N1
-    $N0 = 'NaN'
-    $N1 = sin $N0
-    say $N1
-.end
-CODE
-NaN
-NaN
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - tan" );
-.sub 'test' :main
-    $N0 = 'Inf'
-    $N1 = tan $N0
-    say $N1
-    $N0 = '-Inf'
-    $N1 = tan $N0
-    say $N1
-    $N0 = 'NaN'
-    $N1 = tan $N0
-    say $N1
-.end
-CODE
-NaN
-NaN
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - cos" );
-.sub 'test' :main
-    $N0 = 'Inf'
-    $N1 = cos $N0
-    say $N1
-    $N0 = '-Inf'
-    $N1 = cos $N0
-    say $N1
-    $N0 = 'NaN'
-    $N1 = cos $N0
-    say $N1
-.end
-CODE
-NaN
-NaN
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - ln" );
-.sub 'test' :main
-    $N0 = 'Inf'
-    $N1 = ln $N0
-    say $N1
-    $N0 = '-Inf'
-    $N1 = ln $N0
-    say $N1
-    $N0 = 'NaN'
-    $N1 = ln $N0
-    say $N1
-.end
-CODE
-Inf
-NaN
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - pow" );
-.sub 'test' :main
-    $N0 = 'Inf'
-    pow $N1, $N0, 2
-    say $N1
-    pow $N1, 2, $N0
-    say $N1
-    $N0 = 'NaN'
-    pow $N1, $N0, 2
-    say $N1
-    pow $N1, 2, $N0
-    say $N1
-.end
-CODE
-Inf
-Inf
-NaN
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Mixing NaN and Inf should give NaN" );
-.sub 'test' :main
-    $N0 = 'NaN'
-    $N1 = 'Inf'
-    $N0 *= $N1
-    say $N0
-    $N0 /= $N1
-    say $N0
-    $N0 -= $N1
-    say $N0
-    $N0 += $N1
-    say $N0
-.end
-CODE
-NaN
-NaN
-NaN
-NaN
-OUTPUT
-
-pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - rounding" );
-.sub 'test' :main
-    $N0 = 'NaN'
-    $N1 = floor $N0
-    say $N1
-    $N2 = ceil $N0
-    say $N2
-    $N0 = 'Inf'
-    $N1 = floor $N0
-    say $N1
-    $N2 = ceil $N0
-    say $N2
-    $N0 = '-Inf'
-    $N1 = floor $N0
-    say $N1
-    $N2 = ceil $N0
-    say $N2
-.end
-CODE
-NaN
-NaN
-Inf
-Inf
--Inf
--Inf
-OUTPUT
-
-TODO: {
-
-local $TODO = 'rounding nan/inf gives something like -2147483648';
-pir_output_is(<<'CODE',<<OUTPUT, "TT #370 Rounding inf/nan");
-.sub 'main'
-        $N0 = 'Inf'
-        $I0 = floor $N0
-        say $I0
-        $N0 = 'NaN'
-        $I0 = floor $N0
-        say $I0
-        $N0 = 'Inf'
-        $I0 = ceil $N0
-        say $I0
-        $N0 = 'NaN'
-        $I0 = ceil $N0
-        say $I0
-    .end
-CODE
-Inf
-NaN
-Inf
-NaN
-OUTPUT
-
-}
 
 # Local Variables:
 #   mode: cperl

Added: trunk/t/op/inf_nan.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/t/op/inf_nan.t	Mon Aug 24 07:56:48 2009	(r40749)
@@ -0,0 +1,584 @@
+#! perl
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+
+use Test::More;
+use Parrot::Test tests => 27;
+
+=head1 NAME
+
+t/op/inf_nan.t - Test math properties of Inf and NaN
+
+=head1 SYNOPSIS
+
+    % prove t/op/inf_nan.t
+
+=head1 DESCRIPTION
+
+Tests for mathematical operations with Inf and Nan.
+
+=cut
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - basic arith" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    say $N0
+    $N0 -= $N0
+    say $N0
+    $N0 *= -1
+    say $N0
+    $N0 *= 0
+    say $N0
+    $N0 += 5
+    say $N0
+    $N0 -= 42
+    say $N0
+    inc $N0
+    say $N0
+    dec $N0
+    say $N0
+    $N2 = abs $N0
+    say $N2
+    $N1 = 'Inf'
+    $N3 = abs $N1
+    say $N3
+    $N1 = '-Inf'
+    $N3 = abs $N1
+    say $N3
+.end
+CODE
+Inf
+NaN
+NaN
+NaN
+NaN
+NaN
+NaN
+NaN
+NaN
+Inf
+Inf
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - exp" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = exp $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = exp $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = exp $N0
+    say $N1
+.end
+CODE
+Inf
+0
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - sqrt" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 =  $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = sqrt $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = sqrt $N0
+    say $N1
+    $N0 = -1
+    $N1 = sqrt $N0
+    say $N1
+.end
+CODE
+Inf
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - sin" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = sin $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = sin $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = sin $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - sinh" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = sinh $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = sinh $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = sinh $N0
+    say $N1
+.end
+CODE
+Inf
+-Inf
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - asin" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = asin $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = asin $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = asin $N0
+    say $N1
+    $N0 = '-2'
+    $N1 = asin $N0
+    say $N1
+    $N0 = '2'
+    $N1 = asin $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - cos" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = cos $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = cos $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = cos $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - cosh" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = cosh $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = cosh $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = cosh $N0
+    say $N1
+.end
+CODE
+Inf
+Inf
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - acos" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = acos $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = acos $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = acos $N0
+    say $N1
+    $N0 = '-2'
+    $N1 = acos $N0
+    say $N1
+    $N0 = '2'
+    $N1 = acos $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - tan" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = tan $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = tan $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = tan $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - tanh" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = tanh $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = tanh $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = tanh $N0
+    say $N1
+.end
+CODE
+1
+-1
+NaN
+OUTPUT
+
+pir_output_like( <<'CODE',qr/^1.5707963.*^-1.5707963.*^NaN/ms,"Inf/NaN - atan" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = atan $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = atan $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = atan $N0
+    say $N1
+.end
+CODE
+
+{
+local $TODO = 'cot/coth/acot not implemented for real numbers';
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - cot" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = cot $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = cot $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = cot $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - coth" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = coth $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = coth $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = coth $N0
+    say $N1
+.end
+CODE
+1
+-1
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - acot" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = acot $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = acot $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = acot $N0
+    say $N1
+    $N0 = '-2'
+    $N1 = acot $N0
+    say $N1
+    $N0 = '2'
+    $N1 = acot $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+NaN
+NaN
+OUTPUT
+}
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - sec" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = sec $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = sec $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = sec $N0
+    say $N1
+.end
+CODE
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - sech" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = sech $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = sech $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = sech $N0
+    say $N1
+.end
+CODE
+0
+0
+NaN
+OUTPUT
+
+pir_output_like( <<'CODE',qr/^1.5707963.*^1.5707963.*^NaN/ms,"Inf/NaN - asec" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = asec $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = asec $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = asec $N0
+    say $N1
+.end
+CODE
+
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - ln" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = ln $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = ln $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = ln $N0
+    say $N1
+.end
+CODE
+Inf
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - log10" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = log10 $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = log10 $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = log10 $N0
+    say $N1
+.end
+CODE
+Inf
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - log2" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = log2 $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = log2 $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = log2 $N0
+    say $N1
+.end
+CODE
+Inf
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - neg" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    $N1 = neg $N0
+    say $N1
+    $N0 = '-Inf'
+    $N1 = neg $N0
+    say $N1
+    $N0 = 'NaN'
+    $N1 = neg $N0
+    say $N1
+.end
+CODE
+-Inf
+Inf
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - pow" );
+.sub 'test' :main
+    $N0 = 'Inf'
+    pow $N1, $N0, 2
+    say $N1
+    pow $N1, 2, $N0
+    say $N1
+    $N0 = 'NaN'
+    pow $N1, $N0, 2
+    say $N1
+    pow $N1, 2, $N0
+    say $N1
+.end
+CODE
+Inf
+Inf
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Mixing NaN and Inf should give NaN" );
+.sub 'test' :main
+    $N0 = 'NaN'
+    $N1 = 'Inf'
+    $N0 *= $N1
+    say $N0
+    $N0 /= $N1
+    say $N0
+    $N0 -= $N1
+    say $N0
+    $N0 += $N1
+    say $N0
+.end
+CODE
+NaN
+NaN
+NaN
+NaN
+OUTPUT
+
+pir_output_is( <<'CODE', <<OUTPUT, "Inf/NaN - rounding" );
+.sub 'test' :main
+    $N0 = 'NaN'
+    $N1 = floor $N0
+    say $N1
+    $N2 = ceil $N0
+    say $N2
+    $N0 = 'Inf'
+    $N1 = floor $N0
+    say $N1
+    $N2 = ceil $N0
+    say $N2
+    $N0 = '-Inf'
+    $N1 = floor $N0
+    say $N1
+    $N2 = ceil $N0
+    say $N2
+.end
+CODE
+NaN
+NaN
+Inf
+Inf
+-Inf
+-Inf
+OUTPUT
+
+TODO: {
+
+local $TODO = 'rounding nan/inf gives something like -2147483648';
+pir_output_is(<<'CODE',<<OUTPUT, "TT #370 Rounding inf/nan");
+.sub 'main'
+        $N0 = 'Inf'
+        $I0 = floor $N0
+        say $I0
+        $N0 = 'NaN'
+        $I0 = floor $N0
+        say $I0
+        $N0 = 'Inf'
+        $I0 = ceil $N0
+        say $I0
+        $N0 = 'NaN'
+        $I0 = ceil $N0
+        say $I0
+    .end
+CODE
+Inf
+NaN
+Inf
+NaN
+OUTPUT
+
+}
+
+TODO: {
+local $TODO = '1+i + NaN should be NaN';
+pir_output_is(<<'CODE',<<OUTPUT,"Adding NaN to a Complex");
+.sub main
+    $P1 = new ["Complex"]
+    $N0 = 'NaN'
+    set $P1, "1 + i"
+    $P1 += $N0
+    say $P1
+.end
+CODE
+NaN
+OUTPUT
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
+


More information about the parrot-commits mailing list