|
Packit |
3f72c8 |
#!/usr/bin/perl
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
use strict;
|
|
Packit |
3f72c8 |
use warnings;
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
use Test::More 0.88;
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
use Math::Int64 qw(:native_if_available
|
|
Packit |
3f72c8 |
int64 int64_to_number
|
|
Packit |
3f72c8 |
net_to_int64 int64_to_net
|
|
Packit |
3f72c8 |
native_to_int64 int64_to_native);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
my $i = int64('1234567890123456789');
|
|
Packit |
3f72c8 |
my $j = $i + 1;
|
|
Packit |
3f72c8 |
my $k = (int64(1) << 60) + 255;
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 1
|
|
Packit |
3f72c8 |
ok($i == '1234567890123456789');
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($j - 1 == '1234567890123456789');
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($k & 127) == 127);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($k & 256) == 0) or diag "$k & 256 is " . ($k & 256);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 5
|
|
Packit |
3f72c8 |
ok ($i * 2 == $j + $j - 2);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
SKIP: {
|
|
Packit |
3f72c8 |
skip "conversion to NV loses low bits", 1;
|
|
Packit |
3f72c8 |
ok ($i * $i * $i * $i == ($j * $j - 2 * $j + 1) * ($j * $j - 2 * $j + 1));
|
|
Packit |
3f72c8 |
};
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
SKIP: {
|
|
Packit |
3f72c8 |
skip "native division semantics differ", 2;
|
|
Packit |
3f72c8 |
ok (($i / $j) == 0);
|
|
Packit |
3f72c8 |
ok ($j / $i == 1);
|
|
Packit |
3f72c8 |
};
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($i % $j == $i);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 10
|
|
Packit |
3f72c8 |
ok ($j % $i == 1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($j += 1) == $i + 2);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($j == $i + 2);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($j -= 3) == $i - 1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($j == $i - 1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
$j = $i;
|
|
Packit |
3f72c8 |
# 15
|
|
Packit |
3f72c8 |
ok (($j *= 2) == $i << 1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($j >> 1) == $i);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($j / 2) == $i);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
$j = $i + 2;
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($j %= $i) == 2);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($j == 2);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 20
|
|
Packit |
3f72c8 |
ok (($j <=> $i) < 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($i <=> $j) > 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($i <=> $i) == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (($j <=> 2) == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($j < $i);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 25
|
|
Packit |
3f72c8 |
ok ($j <= $i);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (!($i < $j));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (!($i <= $j));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($i <= $i);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($j >= $j);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 30
|
|
Packit |
3f72c8 |
ok ($i > $j);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ($i >= $j);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (!($j > $i));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (!($j >= $i));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (int(log(int64(1)<<50)/log(2)+0.001) == 50);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 35
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
my $n = int64_to_net(-1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (join(" ", unpack "C*" => $n) eq join(" ", (255) x 8));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (net_to_int64($n) == -1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (native_to_int64(int64_to_native(-1)) == -1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (native_to_int64(int64_to_native(0)) == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (native_to_int64(int64_to_native(-12343)) == -12343);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
# 40
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
$n = pack(NN => 0x01020304, 0x05060708);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok (net_to_int64($n) == ((int64(0x01020304) << 32) + 0x05060708));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ((($i | $j) & 1) != 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok ((($i & $j) & 1) == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
SKIP: {
|
|
Packit |
3f72c8 |
skip "backend != IV", 8 unless Math::Int64::_backend() eq 'IV';
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok(ref $_ eq '') for ($i, $j, $k,
|
|
Packit |
3f72c8 |
net_to_int64(pack(NN => 0x01020304, 0x05060708)),
|
|
Packit |
3f72c8 |
int64_to_net(-1),
|
|
Packit |
3f72c8 |
native_to_int64(int64_to_native(-1)),
|
|
Packit |
3f72c8 |
native_to_int64(int64_to_native(0)),
|
|
Packit |
3f72c8 |
native_to_int64(int64_to_native(-12343)));
|
|
Packit |
3f72c8 |
}
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
done_testing();
|