xref: /openbsd-src/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/min.t (revision 9f11ffb7133c203312a01e4b986886bc88c7d74b)
1#!./perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 22;
7use List::Util qw(min);
8
9my $v;
10
11ok(defined &min, 'defined');
12
13$v = min(9);
14is($v, 9, 'single arg');
15
16$v = min (1,2);
17is($v, 1, '2-arg ordered');
18
19$v = min(2,1);
20is($v, 1, '2-arg reverse ordered');
21
22my @a = map { rand() } 1 .. 20;
23my @b = sort { $a <=> $b } @a;
24$v = min(@a);
25is($v, $b[0], '20-arg random order');
26
27my $one = Foo->new(1);
28my $two = Foo->new(2);
29my $thr = Foo->new(3);
30
31$v = min($one,$two,$thr);
32is($v, 1, 'overload');
33
34$v = min($thr,$two,$one);
35is($v, 1, 'overload');
36
37{ package Foo;
38
39use overload
40  '""' => sub { ${$_[0]} },
41  '0+' => sub { ${$_[0]} },
42  '<'  => sub { ${$_[0]} < ${$_[1]} },
43  fallback => 1;
44  sub new {
45    my $class = shift;
46    my $value = shift;
47    bless \$value, $class;
48  }
49}
50
51use Math::BigInt;
52
53my $v1 = Math::BigInt->new(2) ** Math::BigInt->new(65);
54my $v2 = $v1 - 1;
55my $v3 = $v2 - 1;
56$v = min($v1,$v2,$v1,$v3,$v1);
57is($v, $v3, 'bigint');
58
59$v = min($v1, 1, 2, 3);
60is($v, 1, 'bigint and normal int');
61
62$v = min(1, 2, $v1, 3);
63is($v, 1, 'bigint and normal int');
64
65{
66    # test that min/max and sum call GETMAGIC properly
67    # note, in my tests how this fails depends on exactly
68    # which List::Util subs are called and in what order.
69    my @list;
70    for my $size (10, 20, 10, 30) {
71        @list = ( 1 ) x $size;
72
73        my $sum= List::Util::sum( 0, $#list );
74        ok( $sum == $size-1, "sum(\$#list, 0) == $size-1");
75
76        my $min= List::Util::min( 15, $#list );
77        ok( $min <= 15, "min(15,$size)" );
78
79        my $max= List::Util::max( 0, $#list );
80        ok( $max == $size-1, "max(\$#list, 0) == $size-1");
81    }
82}
83