Fix [perl #66970] Incorrect coderef in MODIFY_CODE_ATTRIBUTES
[p5sagit/p5-mst-13.2.git] / ext / List-Util / t / min.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
cf083cf9 16use strict;
2ff28616 17use Test::More tests => 8;
f4a2945e 18use List::Util qw(min);
19
cf083cf9 20my $v;
f4a2945e 21
cf083cf9 22ok(defined &min, 'defined');
f4a2945e 23
cf083cf9 24$v = min(9);
25is($v, 9, 'single arg');
f4a2945e 26
cf083cf9 27$v = min (1,2);
28is($v, 1, '2-arg ordered');
f4a2945e 29
cf083cf9 30$v = min(2,1);
31is($v, 1, '2-arg reverse ordered');
f4a2945e 32
33my @a = map { rand() } 1 .. 20;
34my @b = sort { $a <=> $b } @a;
cf083cf9 35$v = min(@a);
36is($v, $b[0], '20-arg random order');
2ff28616 37
38my $one = Foo->new(1);
39my $two = Foo->new(2);
40my $thr = Foo->new(3);
41
42$v = min($one,$two,$thr);
43is($v, 1, 'overload');
44
45$v = min($thr,$two,$one);
46is($v, 1, 'overload');
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 = $v1 - 1;
66 my $v3 = $v2 - 1;
67 $v = min($v1,$v2,$v1,$v3,$v1);
68 is($v, $v3, 'bigint');
69}