Use minimal @INC in tests, most of the time just '../lib',
[p5sagit/p5-mst-13.2.git] / t / op / 64bitint.t
index 60f72c3..5cfb65a 100644 (file)
@@ -7,16 +7,16 @@ BEGIN {
                exit(0);
        }
        chdir 't' if -d 't';
-       unshift @INC, '../lib';
+       @INC = '../lib';
 }
 
-# This could use a lot of more tests.
+# This could use many more tests.
 
 # so that using > 0xfffffff constants and
 # 32+ bit integers don't cause noise
 no warnings qw(overflow portable);
 
-print "1..48\n";
+print "1..52\n";
 
 my $q = 12345678901;
 my $r = 23456789012;
@@ -123,85 +123,106 @@ $x = $q - $r;
 print "not " unless $x == -11111110111 && -$x > $f;
 print "ok 22\n";
 
-$x = $q * 1234567;
-print "not " unless $x == 15241567763770867 && $x > $f;
-print "ok 23\n";
-
-$x /= 1234567;
-print "not " unless $x == $q && $x > $f;
-print "ok 24\n";
-
-$x = 98765432109 % 12345678901;
-print "not " unless $x == 901;
-print "ok 25\n";
-
-# The following 12 tests adapted from op/inc.
-
-$a = 9223372036854775807;
-$c = $a++;
-print "not " unless $a == 9223372036854775808;
-print "ok 26\n";
-
-$a = 9223372036854775807;
-$c = ++$a;
-print "not " unless $a == 9223372036854775808 && $c == $a;
-print "ok 27\n";
-
-$a = 9223372036854775807;
-$c = $a + 1;
-print "not " unless $a == 9223372036854775807 && $c == 9223372036854775808;
-print "ok 28\n";
-
-$a = -9223372036854775808;
-$c = $a--;
-print "not " unless $a == -9223372036854775809 && $c == -9223372036854775808;
-print "ok 29\n";
-
-$a = -9223372036854775808;
-$c = --$a;
-print "not " unless $a == -9223372036854775809 && $c == $a;
-print "ok 30\n";
-
-$a = -9223372036854775808;
-$c = $a - 1;
-print "not " unless $a == -9223372036854775808 && $c == -9223372036854775809;
-print "ok 31\n";
-
-$a = 9223372036854775808;
-$a = -$a;
-$c = $a--;
-print "not " unless $a == -9223372036854775809 && $c == -9223372036854775808;
-print "ok 32\n";
-
-$a = 9223372036854775808;
-$a = -$a;
-$c = --$a;
-print "not " unless $a == -9223372036854775809 && $c == $a;
-print "ok 33\n";
-
-$a = 9223372036854775808;
-$a = -$a;
-$c = $a - 1;
-print "not " unless $a == -9223372036854775808 && $c == -9223372036854775809;
-print "ok 34\n";
-
-$a = 9223372036854775808;
-$b = -$a;
-$c = $b--;
-print "not " unless $b == -$a-1 && $c == -$a;
-print "ok 35\n";
-
-$a = 9223372036854775808;
-$b = -$a;
-$c = --$b;
-print "not " unless $b == -$a-1 && $c == $b;
-print "ok 36\n";
-
-$a = 9223372036854775808;
-$b = -$a;
-$b = $b - 1;
-print "not " unless $b == -(++$a);
-print "ok 37\n";
+if ($^O ne 'unicos') {
+    $x = $q * 1234567;
+    print "not " unless $x == 15241567763770867 && $x > $f;
+    print "ok 23\n";
+
+    $x /= 1234567;
+    print "not " unless $x == $q && $x > $f;
+    print "ok 24\n";
+
+    $x = 98765432109 % 12345678901;
+    print "not " unless $x == 901;
+    print "ok 25\n";
+    
+    # The following 12 tests adapted from op/inc.
+
+    $a = 9223372036854775807;
+    $c = $a++;
+    print "not " unless $a == 9223372036854775808;
+    print "ok 26\n";
+
+    $a = 9223372036854775807;
+    $c = ++$a;
+    print "not "
+       unless $a == 9223372036854775808 && $c == $a;
+    print "ok 27\n";
+
+    $a = 9223372036854775807;
+    $c = $a + 1;
+    print "not "
+       unless $a == 9223372036854775807 && $c == 9223372036854775808;
+    print "ok 28\n";
+
+    $a = -9223372036854775808;
+    $c = $a--;
+    print "not "
+       unless $a == -9223372036854775809 && $c == -9223372036854775808;
+    print "ok 29\n";
+
+    $a = -9223372036854775808;
+    $c = --$a;
+    print "not "
+       unless $a == -9223372036854775809 && $c == $a;
+    print "ok 30\n";
+
+    $a = -9223372036854775808;
+    $c = $a - 1;
+    print "not "
+       unless $a == -9223372036854775808 && $c == -9223372036854775809;
+    print "ok 31\n";
+    
+    $a = 9223372036854775808;
+    $a = -$a;
+    $c = $a--;
+    print "not "
+       unless $a == -9223372036854775809 && $c == -9223372036854775808;
+    print "ok 32\n";
+    
+    $a = 9223372036854775808;
+    $a = -$a;
+    $c = --$a;
+    print "not "
+       unless $a == -9223372036854775809 && $c == $a;
+    print "ok 33\n";
+    
+    $a = 9223372036854775808;
+    $a = -$a;
+    $c = $a - 1;
+    print "not "
+       unless $a == -9223372036854775808 && $c == -9223372036854775809;
+    print "ok 34\n";
+
+    $a = 9223372036854775808;
+    $b = -$a;
+    $c = $b--;
+    print "not "
+       unless $b == -$a-1 && $c == -$a;
+    print "ok 35\n";
+
+    $a = 9223372036854775808;
+    $b = -$a;
+    $c = --$b;
+    print "not "
+       unless $b == -$a-1 && $c == $b;
+    print "ok 36\n";
+
+    $a = 9223372036854775808;
+    $b = -$a;
+    $b = $b - 1;
+    print "not "
+       unless $b == -(++$a);
+    print "ok 37\n";
+
+} else {
+    # Unicos has imprecise doubles (14 decimal digits or so),
+    # especially if operating near the UV/IV limits the low-order bits
+    # become mangled even by simple arithmetic operations.
+    for (23..37) {
+       print "ok #_ # skipped: too imprecise numbers\n";
+    }
+}
 
 
 $x = '';
@@ -233,10 +254,29 @@ print "ok 45\n";
 print "not " unless (0x8000000000000000 | 1) == 0x8000000000000001;
 print "ok 46\n";
 
-print "not " unless (0xf000000000000000 & 0x8000000000000000) == 0x8000000000000000;
+print "not "
+    unless (0xf000000000000000 & 0x8000000000000000) == 0x8000000000000000;
 print "ok 47\n";
 
-print "not " unless (0xf000000000000000 ^ 0xfffffffffffffff0) == 0x0ffffffffffffff0;
+print "not "
+    unless (0xf000000000000000 ^ 0xfffffffffffffff0) == 0x0ffffffffffffff0;
 print "ok 48\n";
 
+
+print "not "
+    unless (sprintf "%b", ~0)   eq
+           '1111111111111111111111111111111111111111111111111111111111111111';
+print "ok 49\n";
+
+print "not "
+    unless (sprintf "%64b", ~0) eq
+           '1111111111111111111111111111111111111111111111111111111111111111';
+print "ok 50\n";
+
+print "not " unless (sprintf "%d", ~0>>1) eq '9223372036854775807';
+print "ok 51\n";
+
+print "not " unless (sprintf "%u", ~0)    eq '18446744073709551615';
+print "ok 52\n";
+
 # eof