Blame t/pow.t

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();