Blame tests/gen_rx-pm.pl.in

Packit 284210
#!@PERL@
Packit 284210
#
Packit 284210
# Generates a test file for comparing @rx and @pm speed.
Packit 284210
#
Packit 284210
use strict;
Packit 284210
use Regexp::Assemble;
Packit 284210
Packit 284210
srand(424242); # We want this static, so we can compare different runs
Packit 284210
Packit 284210
my $MIN = $ARGV[0] || 0;
Packit 284210
my $MAX = $ARGV[1] || 5000;
Packit 284210
my $INC = $ARGV[2] || int($MAX * .05);
Packit 284210
my $ITERATIONS = 10000;
Packit 284210
my $MINSTRLEN = 2;
Packit 284210
my $MAXSTRLEN = 8;
Packit 284210
Packit 284210
my $match = join '', ('a' .. 'z');
Packit 284210
my @param = ();
Packit 284210
my $i=$MIN;
Packit 284210
while ($i <= $MAX) {
Packit 284210
	my $ra = Regexp::Assemble->new;
Packit 284210
Packit 284210
	while (@param < $i) {
Packit 284210
		unshift @param, rndstr();
Packit 284210
	}
Packit 284210
Packit 284210
	$ra->add(@param);
Packit 284210
Packit 284210
	printf (
Packit 284210
		"# rx: %6d\n".
Packit 284210
		"{\n".
Packit 284210
		"  comment => \"rx1 %6d item(s)\",\n".
Packit 284210
		"  type => \"op\",\n".
Packit 284210
		"  name => \"rx\",\n".
Packit 284210
		"  param => qr/%s/,\n".
Packit 284210
		"  input => \"%s\",\n".
Packit 284210
		"  ret => " . (@param ? 0 : 1) . ",".
Packit 284210
		"  iterations => %d,\n".
Packit 284210
		"},\n",
Packit 284210
		$i,
Packit 284210
		$i,
Packit 284210
		(@param ? '(?:' . join('|', @param) . ')' : ""),
Packit 284210
		$match,
Packit 284210
		$ITERATIONS,
Packit 284210
	);
Packit 284210
Packit 284210
	printf (
Packit 284210
		"# rx-optimized: %6d\n".
Packit 284210
		"{\n".
Packit 284210
		"  comment => \"rx2 %6d item(s)\",\n".
Packit 284210
		"  type => \"op\",\n".
Packit 284210
		"  name => \"rx\",\n".
Packit 284210
		"  param => qr/%s/,\n".
Packit 284210
		"  input => \"%s\",\n".
Packit 284210
		"  ret => " . (@param ? 0 : 1) . ",".
Packit 284210
		"  iterations => %d,\n".
Packit 284210
		"},\n",
Packit 284210
		$i,
Packit 284210
		$i,
Packit 284210
		(@param ? $ra->as_string : ""),
Packit 284210
		$match,
Packit 284210
		$ITERATIONS,
Packit 284210
	);
Packit 284210
Packit 284210
	printf (
Packit 284210
		"# pm: %6d\n".
Packit 284210
		"{\n".
Packit 284210
		"  comment => \"pm1 %6d item(s)\",\n".
Packit 284210
		"  type => \"op\",\n".
Packit 284210
		"  name => \"pm\",\n".
Packit 284210
		"  param => \"%s\",\n".
Packit 284210
		"  input => \"%s\",\n".
Packit 284210
		"  ret => 0,".
Packit 284210
		"  iterations => %d,\n".
Packit 284210
		"},\n",
Packit 284210
		$i,
Packit 284210
		$i,
Packit 284210
		join(' ', @param ? @param : ("''")),
Packit 284210
		$match,
Packit 284210
		$ITERATIONS,
Packit 284210
	);
Packit 284210
Packit 284210
	$i = ($i == $MIN) ? ($i + $INC) - ($i % $INC) : $i + $INC;
Packit 284210
Packit 284210
}
Packit 284210
Packit 284210
sub rndstr {
Packit 284210
	my @c = ('a' .. 'z');
Packit 284210
	my $rndstr;
Packit 284210
  my $max = int(rand($MAXSTRLEN - $MINSTRLEN)) + $MINSTRLEN;
Packit 284210
	foreach (1 .. $max) {
Packit 284210
		$rndstr .= $c[rand @c];
Packit 284210
	}
Packit 284210
	# We need a string that is not in another string for "last"
Packit 284210
	if ($match =~ m/$rndstr/) {
Packit 284210
		$rndstr = rndstr();
Packit 284210
	}
Packit 284210
	return $rndstr;
Packit 284210
}