The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl  -I./blib/arch -I./blib/lib
 use strict;
 my $string = qq|Testing |.chr(02).qq| stx|;
 eval { require String::Random };
 if ($@) {
	print "Failed to find String::Random, using static string\n"
 } else {
	my $str = new String::Random;
	$string = $str->randpattern(("."x180));
 }

 use lib "./blib/arch";
 use lib "./blib/lib";
 require String::LRC;
 my $timehires;
 eval {  require Time::HiRes };
 if ($@) {
	print "Failed to find Time::HiRes, using localtime() instead\n";
	$timehires = undef;
 } else {
	use Time::HiRes;
	use Time::HiRes qw(gettimeofday tv_interval);
	$timehires = 1;
 }
 print "1..5\n";
 my ($tbegin, $tbegin2, $tend, $tend2, $elapsed, $elapsed2, $lrc, $lrc2, $plrc, $clrc, 
	$error, $tbegin3, $tbegin4, $tend3, $tend4, $elapsed3, $elapsed4, $perlstring);
if (defined $timehires && $timehires > 0) {
	$tbegin = [gettimeofday];
} else {
	$tbegin = localtime;
}
$lrc = String::LRC::getPerlLRC($string);
if (defined $timehires && $timehires > 0) {
	$tend = [gettimeofday];
	$elapsed = tv_interval ($tbegin, $tend);
} else {
	$tend = localtime;
	$elapsed = $tend - $tbegin;
}

if (defined $timehires && $timehires > 0) {
	$tbegin2 = [gettimeofday];
} else {
	$tbegin2 = localtime;
}
$lrc2 = String::LRC::lrc($string);
if (defined $timehires && $timehires > 0) {
	$tend2 = [gettimeofday];
	$elapsed2 = tv_interval ($tbegin2, $tend2);
} else {
	$tend2 = localtime;
	$elapsed2 = $tend2 - $tbegin2;
}

print qq|The LRC for our test string of length |
	. length($string)
	.qq| is "$lrc"/"$lrc2" [ASCII #|.ord($lrc).qq|/|.ord($lrc2).qq|]\n|;
printf (qq|Took %12.10f seconds to find LRC as perl subroutine (%5.2fKchars/sec)\n|,$elapsed,
		((length($string)/$elapsed)/1000)
		);
printf (qq|Took %12.10f seconds to find LRC as XS function (%5.2fKchars/sec)\n|,$elapsed2,
		((length($string)/$elapsed2)/1000)
		);
print "".(defined $elapsed ? qq|ok 1| : qq|not ok 1|) ."\n";
print "".(defined $elapsed2 ? qq|ok 2| : qq|not ok 2|) ."\n";
if ($elapsed > 0) {
printf (qq|C based module takes %4.2f/20th the time of the perl subroutine\n|, ($elapsed2/$elapsed) * 20);
}
if (defined $timehires && $timehires > 0) {
	$tbegin3 = [gettimeofday];
} else {
	$tbegin3 = localtime;
}
$error = 0;
my $testfile = "README";
open TESTFILE, $testfile or $error++;
print "".($error > 0?qq|Unable to open file $testfile|:"")."\n";
if ($error <= 0) {
while (<TESTFILE>) {
	$perlstring .= $_;
}
close TESTFILE;
$plrc = String::LRC::getPerlLRC($perlstring);
}


if (defined $timehires && $timehires > 0) {
	$tend3 = [gettimeofday];
	$elapsed3 = tv_interval ($tbegin3, $tend3);
} else {
	$tend3 = localtime;
	$elapsed3 = $tend3 - $tbegin3;
}

if (defined $timehires && $timehires > 0) {
	$tbegin4 = [gettimeofday];
} else {
	$tbegin4 = localtime;
}
$error = 0;
open TESTFILE2, $testfile or $error++;
print "".($error > 0?qq|Unable to open file $testfile|:"")."\n";
if ($error <= 0) {
#	$clrc = String::LRC::lrc(*TESTFILE2);
	$clrc = String::LRC::lrc(*TESTFILE2);
	close TESTFILE2;
}
if (defined $timehires && $timehires > 0) {
	$tend4 = [gettimeofday];
	$elapsed4 = tv_interval ($tbegin4, $tend4);
} else {
	$tend4 = localtime;
	$elapsed4 = $tend4 - $tbegin4;
}

print qq|The LRC for our test file of length |
	. length($perlstring)
	.qq| is "$plrc"/"$clrc" [ASCII #|.ord($plrc).qq|/|.ord($clrc).qq|]\n|;
printf (qq|Took %12.10f seconds to find LRC as perl subroutine (%5.2fKchars/sec)\n|,$elapsed3, 
		((length($perlstring)/$elapsed3)/1000)
		);
printf (qq|Took %12.10f seconds to find LRC as XS function (%5.2fKchars/sec)\n|,$elapsed4, 
		((length($perlstring)/$elapsed4)/1000)
		);
print "".(defined $elapsed3 ? qq|ok 3| : qq|not ok 3|) ."\n";
print "".(defined $elapsed4 ? qq|ok 4| : qq|not ok 4|) ."\n";
if ($elapsed3 > 0){
printf (qq|C based module takes %4.2f/20th the time of the perl subroutine\n|, ($elapsed4/$elapsed3) * 20);
}
print "".($plrc eq $clrc ? qq|ok 5| : qq|not ok 5|)."\n";