c:\@Work\Perl\monks>perl
use strict;
use warnings;
use Test::More 'no_plan';
use Test::NoWarnings;
note "add more test cases; it's easy -- and fun!";
my @Tests = (
'edge cases: drop all, none, nothing matches',
[ [ qw(red green blue yellow pink purple brown) ], # input set
[ qw(red green blue yellow pink purple brown) ], # drop these
[ ], # expected output
],
[ [ qw(red green blue yellow pink purple brown) ],
[ ],
[ qw(red green blue yellow pink purple brown) ],
],
[ [ qw(red green blue yellow pink purple brown) ],
[ qw(foo bar) ],
[ qw(red green blue yellow pink purple brown) ],
],
'degenerate cases: empty input',
[ [ ],
[ qw(red green blue yellow pink purple brown) ],
[ ],
],
[ [ ],
[ ],
[ ],
],
'normal cases',
[ [ qw(red green blue yellow pink purple brown) ],
[ qw(red ) ],
[ qw( green blue yellow pink purple brown) ],
],
[ [ qw(red green blue yellow pink purple brown) ],
[ qw( brown) ],
[ qw(red green blue yellow pink purple ) ],
],
[ [ qw(red green blue yellow pink purple brown) ],
[ qw( pink purple ) ],
[ qw(red green blue yellow brown) ],
],
);
VECTOR:
for my $ar_vector (@Tests) {
if (not ref $ar_vector) {
note $ar_vector;
next VECTOR;
}
my ($ar_input, $ar_drop, $ar_expected) = @$ar_vector;
my %to_be_dropped = map { $_ => 1 } @$ar_drop;
my @output = grep !$to_be_dropped{$_}, @$ar_input;
is_deeply \@output, $ar_expected, "dropped: (@$ar_drop)";
} # end for VECTOR
done_testing;
exit; # define test/support functions after exit (why?)
# functions under test (if any), support subroutines ################
# none for now
__END__
# add more test cases; it's easy -- and fun!
# edge cases: drop all, none, nothing matches
ok 1 - dropped: (red green blue yellow pink purple brown)
ok 2 - dropped: ()
ok 3 - dropped: (foo bar)
# degenerate cases: empty input
ok 4 - dropped: (red green blue yellow pink purple brown)
ok 5 - dropped: ()
# normal cases
ok 6 - dropped: (red)
ok 7 - dropped: (brown)
ok 8 - dropped: (pink purple)
1..8
ok 9 - no warnings
1..9
(This should really have been put into a file. Oh, well...) It's a lot to absorb, so don't worry too much about it. It's really just meant to whet your appetite: just know it's there.