Blame tests/gen_rx-pm.pl.in

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