Commit | Line | Data |
1bfb5477 |
1 | #!./perl |
2 | |
f4a2945e |
3 | BEGIN { |
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 |
16 | use Test::More tests => 8; |
1bfb5477 |
17 | |
f4a2945e |
18 | use List::Util qw(sum); |
19 | |
cf083cf9 |
20 | my $v = sum; |
21 | is( $v, undef, 'no args'); |
f4a2945e |
22 | |
cf083cf9 |
23 | $v = sum(9); |
24 | is( $v, 9, 'one arg'); |
f4a2945e |
25 | |
cf083cf9 |
26 | $v = sum(1,2,3,4); |
27 | is( $v, 10, '4 args'); |
f4a2945e |
28 | |
cf083cf9 |
29 | $v = sum(-1); |
30 | is( $v, -1, 'one -1'); |
aaaf1885 |
31 | |
32 | my $x = -3; |
33 | |
cf083cf9 |
34 | $v = sum($x, 3); |
35 | is( $v, 0, 'variable arg'); |
aaaf1885 |
36 | |
cf083cf9 |
37 | $v = sum(-3.5,3); |
38 | is( $v, -0.5, 'real numbers'); |
aaaf1885 |
39 | |
2ff28616 |
40 | my $one = Foo->new(1); |
41 | my $two = Foo->new(2); |
42 | my $thr = Foo->new(3); |
43 | |
44 | $v = sum($one,$two,$thr); |
45 | is($v, 6, 'overload'); |
46 | |
47 | |
48 | { package Foo; |
49 | |
50 | use 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 | |
61 | SKIP: { |
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 | } |