#!perl
use strict;
use warnings;
use Test::More tests => 6 * 2;
my @comp = (0, 0);
my @exec = (0, 0);
my $rx;
{
use re::engine::Plugin comp => sub { ++$comp[0] },
exec => sub { ++$exec[0]; 0 };
eval '$rx = qr/foo/';
is "@comp", '1 0', 'is compiled with the first engine';
is "@exec", '0 0', 'not executed yet';
}
"abc" =~ /$rx/;
is "@comp", '1 0', 'was compiled with the first engine';
is "@exec", '1 0', 'is executed with the first engine';
{
use re::engine::Plugin comp => sub { ++$comp[1] },
exec => sub { ++$exec[1]; 0 };
"def" =~ /$rx/;
is "@comp", '1 0', 'was still compiled with the first engine';
is "@exec", '2 0', 'is executed with the first engine again';
eval '$rx = qr/bar/';
is "@comp", '1 1', 'is compiled with the second engine';
is "@exec", '2 0', 'not executed since last time';
}
"ghi" =~ /$rx/;
is "@comp", '1 1', 'was compiled with the second engine';
is "@exec", '2 1', 'is executed with the second engine';
{
use re 'debug';
"jkl" =~ /$rx/;
is "@comp", '1 1', 'was still compiled with the second engine';
is "@exec", '2 2', 'is executed with the second engine again (and not with "re \'debug\'")';
}