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 | |
cf083cf9 |
16 | use strict; |
2ff28616 |
17 | use Test::More tests => 8; |
f4a2945e |
18 | use List::Util qw(min); |
19 | |
cf083cf9 |
20 | my $v; |
f4a2945e |
21 | |
cf083cf9 |
22 | ok(defined &min, 'defined'); |
f4a2945e |
23 | |
cf083cf9 |
24 | $v = min(9); |
25 | is($v, 9, 'single arg'); |
f4a2945e |
26 | |
cf083cf9 |
27 | $v = min (1,2); |
28 | is($v, 1, '2-arg ordered'); |
f4a2945e |
29 | |
cf083cf9 |
30 | $v = min(2,1); |
31 | is($v, 1, '2-arg reverse ordered'); |
f4a2945e |
32 | |
33 | my @a = map { rand() } 1 .. 20; |
34 | my @b = sort { $a <=> $b } @a; |
cf083cf9 |
35 | $v = min(@a); |
36 | is($v, $b[0], '20-arg random order'); |
2ff28616 |
37 | |
38 | my $one = Foo->new(1); |
39 | my $two = Foo->new(2); |
40 | my $thr = Foo->new(3); |
41 | |
42 | $v = min($one,$two,$thr); |
43 | is($v, 1, 'overload'); |
44 | |
45 | $v = min($thr,$two,$one); |
46 | is($v, 1, 'overload'); |
47 | |
48 | { package Foo; |
49 | |
50 | use overload |
51 | '""' => sub { ${$_[0]} }, |
52 | '+0' => sub { ${$_[0]} }, |
4daffb2b |
53 | '<' => sub { ${$_[0]} < ${$_[1]} }, |
2ff28616 |
54 | fallback => 1; |
55 | sub new { |
56 | my $class = shift; |
57 | my $value = shift; |
58 | bless \$value, $class; |
59 | } |
60 | } |
61 | |
62 | SKIP: { |
63 | eval { require bignum; } or skip("Need bignum for testing overloading",1); |
64 | |
65 | my $v1 = 2**65; |
66 | my $v2 = $v1 - 1; |
67 | my $v3 = $v2 - 1; |
68 | $v = min($v1,$v2,$v1,$v3,$v1); |
69 | is($v, $v3, 'bigint'); |
70 | } |