Commit | Line | Data |
---|---|---|
1bfb5477 GB |
1 | #!./perl |
2 | ||
f4a2945e | 3 | BEGIN { |
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 | 16 | use Test::More tests => 13; |
1bfb5477 | 17 | |
f4a2945e JH |
18 | use List::Util qw(sum); |
19 | ||
cf083cf9 GB |
20 | my $v = sum; |
21 | is( $v, undef, 'no args'); | |
f4a2945e | 22 | |
cf083cf9 GB |
23 | $v = sum(9); |
24 | is( $v, 9, 'one arg'); | |
f4a2945e | 25 | |
cf083cf9 GB |
26 | $v = sum(1,2,3,4); |
27 | is( $v, 10, '4 args'); | |
f4a2945e | 28 | |
cf083cf9 GB |
29 | $v = sum(-1); |
30 | is( $v, -1, 'one -1'); | |
aaaf1885 GB |
31 | |
32 | my $x = -3; | |
33 | ||
cf083cf9 GB |
34 | $v = sum($x, 3); |
35 | is( $v, 0, 'variable arg'); | |
aaaf1885 | 36 | |
cf083cf9 GB |
37 | $v = sum(-3.5,3); |
38 | is( $v, -0.5, 'real numbers'); | |
aaaf1885 | 39 | |
2ff28616 GB |
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 | ||
3630f57e CBW |
61 | use Math::BigInt; |
62 | my $v1 = Math::BigInt->new(2) ** Math::BigInt->new(65); | |
63 | my $v2 = $v1 - 1; | |
64 | $v = sum($v1,$v2); | |
65 | is($v, $v1 + $v2, 'bigint'); | |
2ff28616 | 66 | |
3630f57e CBW |
67 | $v = sum(42, $v1); |
68 | is($v, $v1 + 42, 'bigint + builtin int'); | |
69 | ||
70 | $v = sum(42, $v1, 2); | |
71 | is($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 | } |