1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
#!perl
use strict ("subs", "vars", "refs");
use warnings ("all");
use lib ("t/lib");
use List::MoreUtils::XS (":all");
use Test::More;
use Test::LMU;
my @even = map { $_ * 2 } 1 .. 100;
my @odd = map { $_ * 2 - 1 } 1 .. 100;
my (@expected, @in);
@expected = @even;
@in = mesh @odd, @even;
foreach my $v (@odd)
{
is($v, (bremove { $_ <=> $v } @in), "$v in order removed");
}
is_deeply(\@in, \@expected, "bremove all odd elements succeeded");
@in = mesh @odd, @even;
foreach my $v (reverse @odd)
{
is($v, (bremove { $_ <=> $v } @in), "$v reverse ordered removed");
}
is_deeply(\@in, \@expected, "bremove all odd elements reversely succeeded");
@expected = @odd;
@in = mesh @odd, @even;
foreach my $v (@even)
{
is($v, (bremove { $_ <=> $v } @in), "$v in order removed");
}
is_deeply(\@in, \@expected, "bremove all even elements succeeded");
@in = mesh @odd, @even;
foreach my $v (reverse @even)
{
is($v, (bremove { $_ <=> $v } @in), "$v reverse ordered removed");
}
is_deeply(\@in, \@expected, "bremove all even elements reversely succeeded");
# test from shawnlaffan from GH issue #2 of List-MoreUtils-XS
SCOPE:
{
my @list = ('somestring');
my $target = $list[0];
is($target, (bremove { $_ cmp $target } @list), 'removed from single item list');
}
leak_free_ok(
'bremove first' => sub {
my @list = (1 .. 100);
my $v = $list[0];
bremove { $_ <=> $v } @list;
},
'bremove last' => sub {
my @list = (1 .. 100);
my $v = $list[-1];
bremove { $_ <=> $v } @list;
},
'bremove middle' => sub {
my @list = (1 .. 100);
my $v = $list[int($#list / 2)];
bremove { $_ <=> $v } @list;
},
);
leak_free_ok(
'bremove first with stack-growing' => sub {
my @list = mesh @odd, @even;
my $v = $list[0];
bremove { grow_stack(); $_ <=> $v } @list;
},
'bremove last with stack-growing' => sub {
my @list = mesh @odd, @even;
my $v = $list[-1];
bremove { grow_stack(); $_ <=> $v } @list;
},
'bremove middle with stack-growing' => sub {
my @list = mesh @odd, @even;
my $v = $list[int($#list / 2)];
bremove { grow_stack(); $_ <=> $v } @list;
},
);
leak_free_ok(
'bremove first with stack-growing and exception' => sub {
my @list = mesh @odd, @even;
my $v = $list[0];
eval {
bremove { grow_stack(); $_ <=> $v or die "Goal!"; $_ <=> $v } @list;
};
},
'bremove last with stack-growing and exception' => sub {
my @list = mesh @odd, @even;
my $v = $list[-1];
eval {
bremove { grow_stack(); $_ <=> $v or die "Goal!"; $_ <=> $v } @list;
};
},
'bremove middle with stack-growing and exception' => sub {
my @list = mesh @odd, @even;
my $v = $list[int($#list / 2)];
eval {
bremove { grow_stack(); $_ <=> $v or die "Goal!"; $_ <=> $v } @list;
};
},
);
is_dying('bremove without sub' => sub { &bremove(42, @even); });
done_testing;
|