Sidef
view release on metacpan or search on metacpan
#!perl -T
use 5.006;
use strict;
use warnings;
use Test::More;
plan tests => 116;
use Sidef;
my $o = 'Sidef::Types::Number::Number';
my $int1 = $o->new(3);
my $int2 = $o->new(-4);
my $inf = $o->inf;
my $nan = $o->nan;
my $ninf = $o->ninf;
sub re($) {
qr/^\Q$_[0]\E\z/;
}
#################################################################
# integer
my $r = $int1->pow($int1);
is("$r", "27");
$r = $int1->ipow($int1);
is("$r", "27");
$r = $int2->pow($int1);
is("$r", "-64");
$r = $int1->pow($int2);
ok($r eq $int1->pow($int2->abs)->inv);
$r = $int1->ipow($int2);
is("$r", "0");
$r = $int2->ipow($int1);
is("$r", "-64");
$r = $int1->neg->pow($int2);
ok($r eq ($int1->pow($int2->abs)->inv));
$r = $int1->neg->pow($int2->dec);
ok($r eq $int1->pow($int2->dec->abs)->inv->neg);
$r = $int2->pow($int1->neg);
is($r->as_rat->get_value, "-1/64");
$r = $int2->pow($int1->neg->inc);
is($r->as_frac->get_value, "1/16");
#################################################################
# float + int
my $float1 = $o->new(3.45)->float;
my $float2 = $o->new(-5.67)->float;
$r = $float1->pow($int1);
is("$r", "41.063625");
$r = $float1->pow($int2);
like("$r", qr/^0\.00705868/);
$r = $float1->pow($float2);
like("$r", qr/^0\.0008924/);
$r = $float2->pow($int1);
is("$r", "-182.284263");
$r = $float2->pow($int2);
like("$r", qr/^0\.00096753/);
$r = $float2->pow($int2->abs);
is("$r", "1033.55177121");
( run in 1.419 second using v1.01-cache-2.11-cpan-800906f7e73 )