|
Packit |
3f72c8 |
#!/usr/bin/perl
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
use strict;
|
|
Packit |
3f72c8 |
use warnings;
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
use Math::Int64 qw(int64 uint64 string_to_int64 string_to_uint64);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
use Test::More 0.88;
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
my $zero = int64(0);
|
|
Packit |
3f72c8 |
my $one = int64(1);
|
|
Packit |
3f72c8 |
my $two = int64(2);
|
|
Packit |
3f72c8 |
my $mone = int64(-1);
|
|
Packit |
3f72c8 |
my $mtwo = int64(-2);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($zero ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($zero ** 1 == 0);
|
|
Packit |
3f72c8 |
ok($zero ** 10 == 0);
|
|
Packit |
3f72c8 |
eval { my $r = $zero ** -1 };
|
|
Packit |
3f72c8 |
ok($@ =~ /illegal.*division/i);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($one ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($one ** 10 == 1);
|
|
Packit |
3f72c8 |
ok($one ** -19 == 1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($mone ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($mone ** 10 == 1);
|
|
Packit |
3f72c8 |
ok($mone ** 11 == -1);
|
|
Packit |
3f72c8 |
ok($mone ** -1 == -1);
|
|
Packit |
3f72c8 |
ok($mone ** -30 == 1);
|
|
Packit |
3f72c8 |
ok($mone ** -31 == -1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($two ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($two ** 1 == 2);
|
|
Packit |
3f72c8 |
ok($two ** 2 == 4);
|
|
Packit |
3f72c8 |
ok($two ** 31 == string_to_int64("0x8000_0000"));
|
|
Packit |
3f72c8 |
ok($two ** 32 == string_to_int64("0x1_0000_0000"));
|
|
Packit |
3f72c8 |
ok($two ** 62 == string_to_int64("0x4000_0000_0000_0000"));
|
|
Packit |
3f72c8 |
ok($two ** -1 == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($mtwo ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($mtwo ** 1 == -2);
|
|
Packit |
3f72c8 |
ok($mtwo ** 2 == 4);
|
|
Packit |
3f72c8 |
ok($mtwo ** 3 == -8);
|
|
Packit |
3f72c8 |
ok($mtwo ** 4 == 16);
|
|
Packit |
3f72c8 |
ok($mtwo ** 31 == -string_to_int64("0x8000_0000"));
|
|
Packit |
3f72c8 |
ok($mtwo ** 32 == string_to_int64("0x1_0000_0000"));
|
|
Packit |
3f72c8 |
ok($mtwo ** 62 == string_to_int64("0x4000_0000_0000_0000"));
|
|
Packit |
3f72c8 |
ok($mtwo ** -1 == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok(int64(12) ** 2 == 144);
|
|
Packit |
3f72c8 |
ok(int64(-12) ** 2 == 144);
|
|
Packit |
3f72c8 |
ok(int64(12) ** 3 == 1728);
|
|
Packit |
3f72c8 |
ok(int64(-12) ** 3 == -1728);
|
|
Packit |
3f72c8 |
ok(int64(256) ** 5 == 2 ** (8 * 5));
|
|
Packit |
3f72c8 |
ok(int64(-256) ** 5 == -(2 ** (8 * 5)));
|
|
Packit |
3f72c8 |
ok(int64(256) ** -5 == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
$zero = uint64(0);
|
|
Packit |
3f72c8 |
$one = uint64(1);
|
|
Packit |
3f72c8 |
$two = uint64(2);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($zero ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($zero ** 1 == 0);
|
|
Packit |
3f72c8 |
ok($zero ** 10 == 0);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($one ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($one ** 10 == 1);
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok($two ** 0 == 1);
|
|
Packit |
3f72c8 |
ok($two ** 1 == 2);
|
|
Packit |
3f72c8 |
ok($two ** 2 == 4);
|
|
Packit |
3f72c8 |
ok($two ** 31 == string_to_uint64("0x8000_0000"));
|
|
Packit |
3f72c8 |
ok($two ** 32 == string_to_uint64("0x1_0000_0000"));
|
|
Packit |
3f72c8 |
ok($two ** 62 == string_to_uint64("0x4000_0000_0000_0000"));
|
|
Packit |
3f72c8 |
ok($two ** 63 == string_to_uint64("0x8000_0000_0000_0000"));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
ok(int64(12) ** 2 == 144);
|
|
Packit |
3f72c8 |
ok(int64(12) ** 3 == 1728);
|
|
Packit |
3f72c8 |
ok(int64(256) ** 5 == 2 ** (8 * 5));
|
|
Packit |
3f72c8 |
|
|
Packit |
3f72c8 |
done_testing();
|