blob: 3615b4ab41688985110b86a25cdff797ca902f7a [file] [log] [blame]
#!./perl
BEGIN {
unless (-d 'blib') {
chdir 't' if -d 't';
@INC = '../lib';
require Config; import Config;
keys %Config; # Silence warning
if ($Config{extensions} !~ /\bList\/Util\b/) {
print "1..0 # Skip: List::Util was not built\n";
exit 0;
}
}
}
use Test::More tests => 13;
use List::Util qw(sum);
my $v = sum;
is( $v, undef, 'no args');
$v = sum(9);
is( $v, 9, 'one arg');
$v = sum(1,2,3,4);
is( $v, 10, '4 args');
$v = sum(-1);
is( $v, -1, 'one -1');
my $x = -3;
$v = sum($x, 3);
is( $v, 0, 'variable arg');
$v = sum(-3.5,3);
is( $v, -0.5, 'real numbers');
my $one = Foo->new(1);
my $two = Foo->new(2);
my $thr = Foo->new(3);
$v = sum($one,$two,$thr);
is($v, 6, 'overload');
{ package Foo;
use overload
'""' => sub { ${$_[0]} },
'+0' => sub { ${$_[0]} },
fallback => 1;
sub new {
my $class = shift;
my $value = shift;
bless \$value, $class;
}
}
use Math::BigInt;
my $v1 = Math::BigInt->new(2) ** Math::BigInt->new(65);
my $v2 = $v1 - 1;
$v = sum($v1,$v2);
is($v, $v1 + $v2, 'bigint');
$v = sum(42, $v1);
is($v, $v1 + 42, 'bigint + builtin int');
$v = sum(42, $v1, 2);
is($v, $v1 + 42 + 2, 'bigint + builtin int');
{ package example;
use overload
'0+' => sub { $_[0][0] },
'""' => sub { my $r = "$_[0][0]"; $r = "+$r" unless $r =~ m/^\-/; $r .= " [$_[0][1]]"; $r },
fallback => 1;
sub new {
my $class = shift;
my $this = bless [@_], $class;
return $this;
}
}
{
my $e1 = example->new(7, "test");
$t = sum($e1, 7, 7);
is($t, 21, 'overload returning non-overload');
$t = sum(8, $e1, 8);
is($t, 23, 'overload returning non-overload');
$t = sum(9, 9, $e1);
is($t, 25, 'overload returning non-overload');
}