Fix [perl #66970] Incorrect coderef in MODIFY_CODE_ATTRIBUTES
[p5sagit/p5-mst-13.2.git] / ext / List-Util / t / sum.t
CommitLineData
1bfb5477 1#!./perl
2
f4a2945e 3BEGIN {
1bfb5477 4 unless (-d 'blib') {
f4a2945e 5 chdir 't' if -d 't';
6 @INC = '../lib';
6b05f64e 7 require Config; import Config;
1bfb5477 8 keys %Config; # Silence warning
6b05f64e 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 14}
15
2ff28616 16use Test::More tests => 8;
1bfb5477 17
f4a2945e 18use List::Util qw(sum);
19
cf083cf9 20my $v = sum;
21is( $v, undef, 'no args');
f4a2945e 22
cf083cf9 23$v = sum(9);
24is( $v, 9, 'one arg');
f4a2945e 25
cf083cf9 26$v = sum(1,2,3,4);
27is( $v, 10, '4 args');
f4a2945e 28
cf083cf9 29$v = sum(-1);
30is( $v, -1, 'one -1');
aaaf1885 31
32my $x = -3;
33
cf083cf9 34$v = sum($x, 3);
35is( $v, 0, 'variable arg');
aaaf1885 36
cf083cf9 37$v = sum(-3.5,3);
38is( $v, -0.5, 'real numbers');
aaaf1885 39
2ff28616 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
61SKIP: {
62 eval { require bignum; } or skip("Need bignum for testing overloading",1);
63
64 my $v1 = 2**65;
65 my $v2 = 2**65;
66 my $v3 = $v1 + $v2;
67 $v = sum($v1,$v2);
68 is($v, $v3, 'bignum');
69}