#!/usr/bin/perl
use strict;
use warnings;
use Test::More 'no_plan';
use ok 'Devel::Events::Match';
my $m = Devel::Events::Match->new;
ok( $m->match("blah", "blah" ), "simple match");
ok( !$m->match("blah", "foo" ), "simple match" );
ok( $m->match(sub { 1 }, "foo"), "code" );
ok( !$m->match(sub { 0 }, "foo"), "code" );
ok( $m->match({ foo => { bar => "gorch" }, baz => sub { 1 }, type => "elk" }, elk => foo => { bar => "gorch" } ), "hash" );
ok( $m->match({ foo => { bar => "gorch" }, baz => sub { 1 }, type => "elk" }, elk => baz => "moose", foo => { bar => "gorch" } ), "hash" );
ok( $m->match({ foo => { bar => "gorch" }, baz => sub { 1 }, type => "elk" }, elk => foo => [ bar => "gorch" ] ), "hash (coerce)" );
ok( !$m->match({ foo => { bar => "gorch" }, baz => sub { 1 }, type => "elk" }, moose => foo => [ bar => "gorch" ] ), "hash (no match)" );
ok( !$m->match({ foo => { bar => "gorch" }, baz => sub { 1 }, type => "elk" }, elk => foo => [ bar => "blah" ] ), "hash (no match)" );
ok( !$m->match({ foo => { bar => "gorch" }, baz => sub { 1 }, type => "elk" }, elk => baz => "blah" ), "hash (no match)" );
ok( !$m->match({ foo => { bar => "gorch" }, baz => sub { 1 }, type => "elk" }, elk => "baz" ), "hash (odd sized event)" );
my @args;
ok( $m->match(sub { @args = @_; 1 }, foo => bar => [ 1 ] ), "code" );
is_deeply( \@args, [ foo => bar => [ 1 ] ], "code args" );
my $i = 0;
my @events = map { [ $_ => ++$i ] } qw/bar foo gorch foo bar blah blah zoink bar gorch boink/;
is_deeply( [ $m->first(match => "foo", events => \@events) ], [ foo => 2 ], "first" );
is_deeply( [ $m->grep (match => "foo", events => \@events) ], [ [ foo => 2 ], [ foo => 4 ] ], "grep");
is_deeply( [ $m->limit(from => "foo", to => "blah", events => \@events) ], [ @events[1..5] ], "limit");
is_deeply(
[ $m->chunk(marker => "foo", events => \@events) ],
[ [ $events[0] ], [ @events[1 .. 2] ], [ @events[3 .. 10 ] ] ],
"chunk",
);
is_deeply(
[ $m->chunk(marker => "foo", first => 0, events => \@events) ],
[ [ @events[1 .. 2] ], [ @events[3 .. 10 ] ] ],
"chunk",
);
is_deeply(
[ $m->chunk(marker => "foo", last => 0, events => \@events) ],
[ [ $events[0] ], [ @events[1 .. 2] ] ],
"chunk",
);
is_deeply(
[ $m->chunk(marker => "foo", first => 0, last => 0, events => \@events) ],
[ [ @events[1 .. 2] ] ],
"chunk",
);