Sidef

 view release on metacpan or  search on metacpan

t/02-pow.t  view on Meta::CPAN

#!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 )