#!/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 () { $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";