The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

#!perl
use strict;
use Object::Array qw(Array);
my @UTILS = @Object::Array::Plugin::ListMoreUtils::UTILS;
my %ARR = (
DEFAULT => [ 1, undef, 0, "a", "z" ],
minmax => [ 1, 5, -3, 7, 2.5 ],
uniq => [ 1, 0, 7, 7, 2, 0, 5 ],
);
my %ARG = (
DEFAULT => [ sub { defined } ],
apply => [ sub { ++$_ } ],
insert_after => [ sub { !defined }, "hello" ],
insert_after_string => [ 'a', 'bcd' ],
);
my %SKIP_RESULT = (
map { $_ => 1 }
qw(natatime),
);
my %NEED_REF = (
map { $_ => 1 }
qw(insert_after insert_after_string)
);
plan(tests => 6 + @UTILS * 2 - keys %SKIP_RESULT);
no strict 'refs';
for my $util (@UTILS) {
my @arr = @{ $ARR{$util} || $ARR{DEFAULT} };
my $arr = Array [ @arr ];
local $SIG{__WARN__} = sub { diag("$util: @_") };
my @args = @{ $ARG{$util} || $ARG{DEFAULT} };
my $got = [ $arr->$util(@args) ];
my $want = [ &{"List::MoreUtils::$util"}(
@args, ($NEED_REF{$util} ? \@arr : @arr),
) ];
my $error = 0;
$SKIP_RESULT{$util} || is_deeply($got, $want, "$util: result") or $error++;
is_deeply([ @$arr ], \@arr, "$util: arrays") or $error++;
$error and diag(Dumper(
$got, $want,
$arr, \@arr,
));
}
my $ref = \1;
my $arr = Array([ 1, 5, "hello", $ref, undef, 0 ]);
ok($arr->contains(undef), "array contains undef");
ok(!$arr->contains(""), "empty string doesn't match undef");
ok($arr->contains("hello"), "array contains string");
ok($arr->contains(5), "array contains number");
ok($arr->contains("5.00"), "array contains number (string)");
ok($arr->contains($ref), "array contains reference");