use strict;
use warnings;

use Test::More;

use List::UtilsBy::XS qw(max_by nmax_by);

my $expected;
my $got;
my @gots;
my @array;

is_deeply( [ max_by {} ], [], 'empty list yields empty' );

$got = scalar (max_by { $_ } 10);
is($got, 10, 'unit list yields value in scalar context');
is_deeply( [ max_by { $_ } 10 ], [ 10 ], 'unit list yields unit list value' );

is_deeply( ( scalar max_by { $_ } 10, 20 ), 20, 'identity function on $_' );

$got = scalar(max_by { length $_ } "a", "ccc", "bb");
is($got, 'ccc', "length function in scalar context");

@gots = max_by { length $_ } "a", "ccc", "bb";
is_deeply(\@gots, [ 'ccc' ], "length function in list context");

$got = scalar(max_by { length $_ } "a", "ccc", "bb", "ddd");
is($got, 'ccc', "first max element");

@gots = max_by { length $_ } "a", "ccc", "bb", "ddd";
$expected = [ qw/ccc ddd/ ];
is_deeply(\@gots, $expected, 'ties yield all maximal in list context');

is_deeply( ( scalar nmax_by { $_ } 10, 20 ), 20, 'nmax_by alias');

done_testing;
