#!/usr/bin/perl -w
use strict;
my ($nt, $nt2, $numop);
BEGIN {
$nt = 10;
$nt2 = 100;
$numop = 8;
}
use Test::More tests=>$nt+3+2*$nt2+$numop;
SKIP: {
skip "t/minusvoption/paulocustodio.eyp not found", $nt unless ($ENV{DEVELOPER} && ($ENV{DEVELOPER} eq 'casiano') && -r "t/minusvoption/paulocustodio.eyp" && -x "./eyapp");
unlink 't/minusvoption/minusv.pl';
# First without -v
my $r = system(q{perl -I./lib/ eyapp -b '' -o t/minusvoption/minusv.pl t/minusvoption/paulocustodio.eyp});
ok(!$r, "minus v compiled");
ok(-s "t/minusvoption/minusv.pl", "modulino minusv.pl exists");
ok(-x "t/minusvoption/minusv.pl", "modulino minusv.pl has execution permits");
eval {
$r = qx{t/minusvoption/minusv.pl 2>&1};
};
ok(!$@,'minusv.pl executed as standalone modulino');
my $expected = q{
Statement 2: Syntax error at org. Expected ('nop').
};
$expected =~ s/\s+//g;
$expected = quotemeta($expected);
$expected = qr{$expected};
$r =~ s/\s+//g;
like($r, $expected,'expected error tokens without -v');
# Now with -v
unlink 't/minusvoption/minusv.pl';
$r = system(q{perl -I./lib/ eyapp -v -b '' -o t/minusvoption/minusv.pl t/minusvoption/paulocustodio.eyp});
ok(!$r, "minus v compiled");
ok(-s "t/minusvoption/minusv.pl", "modulino minusv.pl exists");
ok(-x "t/minusvoption/minusv.pl", "modulino minusv.pl has execution permits");
eval {
$r = qx{t/minusvoption/minusv.pl 2>&1};
};
ok(!$@,'minusv.pl executed as standalone modulino');
$expected = q{
Statement 1: Syntax error at org. Expected ('', 'nop', '\n').
};
$expected =~ s/\s+//g;
$expected = quotemeta($expected);
$expected = qr{$expected};
$r =~ s/\s+//g;
like($r, $expected,'expected error tokens without -v');
unlink 't/minusvoption/minusv.pl';
}
# Test YYExpected using the data generation program
SKIP: {
eval { require Test::LectroTest::Generator };
my $TLTinstalled = !$@;
skip "t/Generator.eyp not found", 3+2*$nt2+$numop unless ($ENV{DEVELOPER}
&& ($ENV{DEVELOPER} eq 'casiano')
&& -r "t/Generator.eyp"
&& -r "t/GenSupport.pm"
&& $TLTinstalled
&& -x "./eyapp");
my %count;
unlink 't/generator.pl';
# First without -v
my $r = system(q{perl -I./lib/ eyapp -C -o t/generator.pl t/Generator.eyp});
ok(!$r, "minus v compiled");
ok(-s "t/generator.pl", "modulino generator.pl exists");
ok(-x "t/generator.pl", "modulino generator.pl has execution permits");
for (1..$nt2) {
eval {
$r = qx{perl -It t/generator.pl 2>&1};
};
ok(!$@,'generator.pl executed as standalone modulino');
my $expected = qr{(?x)
\A
\s*\#\s*result:.+
\s*
((\w+\s*=\s*[\w+*/;^()-]*)\s*;?\s*)+
\Z
};
like($r, $expected,'random arithmetic expression generated');
$count{'+'}++ if $r =~ /[+]/;
$count{'-'}++ if $r =~ /-/;
$count{'*'}++ if $r =~ /[*]/;
$count{'/'}++ if $r =~ m{/};
$count{'('}++ if $r =~ /[(]/;
$count{')'}++ if $r =~ /[)]/;
$count{'^'}++ if $r =~ /\^/;
$count{'--'}++ if $r =~ /--/;
}
# Warning! There is a low probability that this tests may fail without significance
for my $operator (qw{ + - * / ( ) ^ --}) {
ok($count{$operator} > 0, "$operator appears $count{$operator} times in $nt2 random generations");
}
unlink 't/generator.pl';
}