This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move Cwd and List-Util to folders named as per their CPAN distributions
[perl5.git] / cpan / Scalar-List-Utils / t / sum.t
CommitLineData
1bfb5477
GB
1#!./perl
2
f4a2945e 3BEGIN {
1bfb5477 4 unless (-d 'blib') {
f4a2945e
JH
5 chdir 't' if -d 't';
6 @INC = '../lib';
6b05f64e 7 require Config; import Config;
1bfb5477 8 keys %Config; # Silence warning
6b05f64e
PP
9 if ($Config{extensions} !~ /\bList\/Util\b/) {
10 print "1..0 # Skip: List::Util was not built\n";
11 exit 0;
12 }
1bfb5477 13 }
f4a2945e
JH
14}
15
3630f57e 16use Test::More tests => 13;
1bfb5477 17
f4a2945e
JH
18use List::Util qw(sum);
19
cf083cf9
GB
20my $v = sum;
21is( $v, undef, 'no args');
f4a2945e 22
cf083cf9
GB
23$v = sum(9);
24is( $v, 9, 'one arg');
f4a2945e 25
cf083cf9
GB
26$v = sum(1,2,3,4);
27is( $v, 10, '4 args');
f4a2945e 28
cf083cf9
GB
29$v = sum(-1);
30is( $v, -1, 'one -1');
aaaf1885
GB
31
32my $x = -3;
33
cf083cf9
GB
34$v = sum($x, 3);
35is( $v, 0, 'variable arg');
aaaf1885 36
cf083cf9
GB
37$v = sum(-3.5,3);
38is( $v, -0.5, 'real numbers');
aaaf1885 39
2ff28616
GB
40my $one = Foo->new(1);
41my $two = Foo->new(2);
42my $thr = Foo->new(3);
43
44$v = sum($one,$two,$thr);
45is($v, 6, 'overload');
46
47
48{ package Foo;
49
50use overload
51 '""' => sub { ${$_[0]} },
52 '+0' => sub { ${$_[0]} },
53 fallback => 1;
54 sub new {
55 my $class = shift;
56 my $value = shift;
57 bless \$value, $class;
58 }
59}
60
3630f57e
CBW
61use Math::BigInt;
62my $v1 = Math::BigInt->new(2) ** Math::BigInt->new(65);
63my $v2 = $v1 - 1;
64$v = sum($v1,$v2);
65is($v, $v1 + $v2, 'bigint');
2ff28616 66
3630f57e
CBW
67$v = sum(42, $v1);
68is($v, $v1 + 42, 'bigint + builtin int');
69
70$v = sum(42, $v1, 2);
71is($v, $v1 + 42 + 2, 'bigint + builtin int');
72
73{ package example;
74
75 use overload
76 '0+' => sub { $_[0][0] },
77 '""' => sub { my $r = "$_[0][0]"; $r = "+$r" unless $r =~ m/^\-/; $r .= " [$_[0][1]]"; $r },
78 fallback => 1;
79
80 sub new {
81 my $class = shift;
82
83 my $this = bless [@_], $class;
84
85 return $this;
86 }
87}
88
89{
90 my $e1 = example->new(7, "test");
91 $t = sum($e1, 7, 7);
92 is($t, 21, 'overload returning non-overload');
93 $t = sum(8, $e1, 8);
94 is($t, 23, 'overload returning non-overload');
95 $t = sum(9, 9, $e1);
96 is($t, 25, 'overload returning non-overload');
2ff28616 97}