The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;
use Search::Tools;
use Search::Tools::Snipper;
use Benchmark qw(:all);
use File::Slurp;

my $ascii = read_file('t/docs/test.txt');
my $query = Search::Tools->parser->parse('recense "checkerbreast cannon"');
my $re_snipper = Search::Tools::Snipper->new(
    query     => $query,
    occur     => 1,
    context   => 25,
    max_chars => 190,
    type      => 're',
);

my $loop_snipper = Search::Tools::Snipper->new(
    query     => $query,
    occur     => 1,
    context   => 25,
    max_chars => 190,
    type      => 'loop',
);

my $offset_snipper = Search::Tools::Snipper->new(
    query     => $query,
    occur     => 1,
    context   => 25,
    max_chars => 190,
    type      => 'offset',
);

my $token_snipper = Search::Tools::Snipper->new(
    query     => $query,
    occur     => 1,
    context   => 25,
    max_chars => 190,
    type      => 'token',
);

cmpthese(
    1000,
    {   're' => sub {
            my $snip = $re_snipper->snip($ascii);
        },
        'loop' => sub {
            my $snip = $loop_snipper->snip($ascii);
        },
        'offset' => sub {
            my $snip = $offset_snipper->snip($ascii);
        },
        'token' => sub {
            my $snip = $token_snipper->snip($ascii);
        },
    }
);