This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
util.c:report_evil_fh: Report name w/initial null
[perl5.git] / t / op / pow.t
index 4342b13..c6a7ad6 100644 (file)
@@ -7,26 +7,43 @@ BEGIN {
     require './test.pl';
 }
 
-# This calcualtion ought to be within 0.001 of the right answer.
+# This calculation ought to be within 0.001 of the right answer.
 my $bits_in_uv = int (0.001 + log (~0+1) / log 2);
 
 # 3**30 < 2**48, don't trust things outside that range on a Cray
 # Likewise other 3 should not overflow 48 bits if I did my sums right.
-my @pow = ([3,30,1e-14],
-           [4,32,0],
-           [5,20,1e-14],
-           [2.5, 10,,1e-14],
-           [-2, 69,0],
-           [-3, 30,0],
+my @pow = ([  3, 30, 1e-14],
+           [  4, 32,     0],
+           [  5, 20, 1e-14],
+           [2.5, 10, 1e-14],
+           [ -2, 69,     0],
+           [ -3, 30, 1e-14],
 );
 my $tests;
 $tests += $_->[1] foreach @pow;
 
-plan tests => 2 + $bits_in_uv + $tests;
+plan tests => 13 + $bits_in_uv + $tests;
 
-# This gave positive 27 before change #20167
+# (-3)**3 gave 27 instead of -27 before change #20167.
+# Let's test the other similar edge cases, too.
+is((-3)**0, 1,   "negative ** 0 = 1");
+is((-3)**1, -3,  "negative ** 1 = self");
+is((-3)**2, 9,   "negative ** 2 = positive");
 is((-3)**3, -27, "(negative int) ** (odd power) is negative");
 
+# Positives shouldn't be a problem
+is(3**0, 1,      "positive ** 0 = 1");
+is(3**1, 3,      "positive ** 1 = self");
+is(3**2, 9,      "positive ** 2 = positive");
+is(3**3, 27,     "(positive int) ** (odd power) is positive");
+
+# And test order of operations while we're at it
+is(-3**0, -1);
+is(-3**1, -3);
+is(-3**2, -9);
+is(-3**3, -27);
+
+
 # Ought to be 32, 64, 36 or something like that.
 
 my $remainder = $bits_in_uv & 3;