my @parsers = qw(C-Expat C-Rxp Java-xp Java-xml4j Perl Python); my @tests = qw(REC chrmed med chrbig big); my $xp_classpath = "/home/ccc/Java/xp/xp.jar"; my $xml4j_classpath = "/home/ccc/Java/xml4j_2_0_2/xml4j.jar"; my $reps = 3; my %cmds = ('C-Expat' => './stats', 'C-Rxp' => './stats', 'Java-xp' => "java -cp $xp_classpath:. Statsxp", 'Java-xml4j' => "java -cp $xml4j_classpath:. Statsax", 'Perl' => 'perl xmlstats', 'Python' => 'python statsexpat.py'); print "
"; foreach (@tests) { print " | $_"; } print "\n | ||
---|---|---|---|
user | sys | real"; } print "\n"; my $parser; foreach $parser (@parsers) { chdir($parser); my $cmd = $cmds{$parser}; print " | |
$parser\n"; #prime memory working set and cache system("$cmd ../Data/$tests[0].xml >/dev/null"); my $test; foreach $test (@tests) { my $tc = "time -f 'u=%U s=%S r=%e' $cmd ../Data/$test.xml 2>&1 >/dev/null"; my ($user, $sys, $real) = (0, 0, 0); for (1 .. $reps) { $result = `$tc`; unless ($result =~ /^u=(\d+\.\d+)\s+s=(\d+\.\d+)\s+r=(\d+\.\d+)/m) { die "Bad result for parser $parser on test $test:\n$result\n"; } my ($u, $s, $r) = ($1, $2, $3); $user += $u; $sys += $s; $real += $r; } $user /= $reps; $sys /= $reps; $real /= $reps; printf " | %.3f | %.3f | %.3f\n", $user, $sys, $real; } chdir('..'); } print " |