blob: f3fe44042efaeb03be2838e9f91a9a1193ab2084 (
plain) (
tree)
|
|
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use List::MoreUtils;
use Scalar::Util 'blessed';
{
use smartmatch sub {
if (blessed($_[1])) {
return overload::Method($_[1], '~~')->($_[1], $_[0]);
}
elsif (ref($_[1])) {
return $_[1]->($_[0]);
}
else {
return $_[1] eq "foo";
}
};
ok("a" ~~ any(1, 2, "foo"));
ok(!("a" ~~ any(1, 2, 3)));
ok("a" ~~ all("foo", "foo", "foo"));
ok(!("a" ~~ all("a", 2, "foo")));
}
sub any {
my @rvals = @_;
return sub {
my ($lval) = @_;
my $recurse = smartmatch::callback_at_level(1);
return List::MoreUtils::any { $recurse->($lval, $_) } @rvals;
}
}
{
package Sugar::All;
use overload '~~' => 'sm_overload';
sub new {
my $class = shift;
my (%params) = @_;
return bless { rvals => $params{rvals} }, $class;
}
sub sm_overload {
my $self = shift;
my ($lval) = @_;
my $recurse = smartmatch::callback_at_level(1);
return List::MoreUtils::all { $recurse->($lval, $_) }
@{ $self->{rvals} };
}
}
sub all {
my @rvals = @_;
return Sugar::All->new(rvals => \@rvals);
}
done_testing;
|