# New Ticket Created by Justin DeVuyst # Please include the string: [perl #32699] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org:80/rt3/Ticket/Display.html?id=32699 >
This patch will allow all the *.imc and *.pasm benchmarks to be tested by running make testbench. There are currently two benchmarks ( hash-utf8.pasm and b6t.imc ) that fail. The hash-utf8 one looks like broken code but the b6t one seems to be something with exceptions. The expected output for both of those is incorrect. For the rest I gleaned the expected outputs from running the benches themselves so if the output is currently wrong then the tests will be verifying that:) Any help in realizing better/proper output would be greatly appreciated. Justin
--- parrot.bak/config/gen/makefiles/root.in 2004-11-29 19:16:25.000000000 -0500 +++ parrot/config/gen/makefiles/root.in 2004-11-29 20:15:55.000000000 -0500 @@ -1096,6 +1096,10 @@ mopstest : test_prep $(TEST_PROG) $(TEST_PROG_ARGS) examples/assembly/mops.pasm +# all benchmarks +testbench: test_prep + $(PERL) t/harness t/benchmarks.t + # Running the game of live lifetest : test_prep $(TEST_PROG) $(TEST_PROG_ARGS) examples/assembly/life.pasm --- parrot.bak/t/benchmarks.t 1969-12-31 19:00:00.000000000 -0500 +++ parrot/t/benchmarks.t 2004-11-29 20:23:01.000000000 -0500 @@ -0,0 +1,258 @@ +#! perl + +use strict; +use warnings; +use Parrot::Test; +use Test::More; + +my %outputs = ( + q(addit.imc) => qq(21001097.970000\n), + q(addit.pasm) => qq(21001097.970000\n), + q(addit2.imc) => qq(21001097.970000\n), + q(array_access.imc) => qr/^1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + Array:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + FixedFloatArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + FixedIntegerArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + FixedPMCArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + FixedStringArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + IntList:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + OrderedHash:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + PerlArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + PMCArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + ResizableFloatArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + ResizableIntegerArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + ResizablePMCArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + ResizableStringArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + SArray:\s\d+\.\d+s\n + \n + 1\s\*\s1000\s=\s1000\n + 1000\s\*\s1000\s=\s1000000\n + StringArray:\s\d+\.\d+s\n$/x, + q(arriter.imc) => qq(100000\n100000\n100000\n111111\n), + q(arriter_o1.imc) => qq(100000\n100000\n100000\n111111\n), + q(b60.imc) => qq(), + q(b61.imc) => qq(1000041\n), + q(b62.imc) => qq(0\n), + q(b63.imc) => qq(499999500000\n), + q(b64.imc) => qq(0\n), + q(b65.imc) => qq(0\n), + q(b6t.imc) => qq(42 == 42 + 1000041 == 1000041 + 999999 == 999999 + 499999500000 == 499999500000 + 0 == 499999500000), + q(bench_newp.pasm) => qr/^\d+\.\d+\sseconds.\s\d+\.\d+\sloops\/sec\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sPMC\sstructs\n + There\sare\s\d+\stotal\sPMC\sstructs\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(fib.imc) => qr/^fib\(28\)\s=\s317811\s\d+\.\d+s$/x, + q(freeze.pasm) => qr/^constr.time\s\d+\.\d+\n + freeze\stime\s\d+\.\d+\n + \s\sthaw\stime\s\d+\.\d+\n + Image\slen\s\d+\n + PerlArray\s100000\n$/x, + q(gc_alloc_new.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(gc_alloc_reuse.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(gc_generations.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(gc_header_new.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(gc_header_reuse.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(gc_waves_headers.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(gc_waves_sizeable_data.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(gc_waves_sizeable_headers.pasm) => qr/^\d+\.\d+\sseconds\.\n + A\stotal\sof\s\d+\sbytes\swere\sallocated\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + A\stotal\sof\s\d+\scollection\sruns\swere\smade\n + Copying\sa\stotal\sof\s\d+\sbytes\n + There\sare\s\d+\sactive\sBuffer\sstructs\n + There\sare\s\d+\stotal\sBuffer\sstructs\n$/x, + q(hash-utf8.pasm) => qq(???), + q(mops.pasm) => qr/^Iterations:\s\s\s\s10000000\n + Estimated\sops:\s20000000\n + done\n + Elapsed\stime:\s\s\d+\.\d+\n + M\sop\/s:\s\s\s\s\s\s\s\s\d+\.\d+\n$/x, + q(oo1-prop.pasm) => qq(10\n), + q(oo1.pasm) => qq(10\n), + q(oo2-prop.pasm) => qq(), + q(oo2.pasm) => qq(10\n), + q(oo3.pasm) => qq(10\n), + q(oo4.pasm) => qq(500000\n), + q(oo5.imc) => qq(10\n), + q(oo6.imc) => qq(500000\n), + q(oofib.imc) => qr/^fib\(28\)\s=\s317811\s\d+\.\d+s$/x, + q(overload.imc) => qq(42\n), + q(primes.pasm) => qr/^N\sprimes\sup\sto\s10000\sis:\s1229\n + last\sis:\s10001\n + Elapsed\stime:\s\d+\.\d+\n$/x, + q(primes2.pasm) => qr/^N\sprimes\scalculated\sto\s5000\sis\s670\n + last\sis:\s4999\n$/x, + q(primes2_i.pasm) => qr/^N\sprimes\scalculated\sto\s10000\s + is\s1230\nlast\sis:\s9973\n$/x, + q(primes_i.pasm) => qr/^N\sprimes\sup\sto\s10000\sis:\s1229\n + last\sis:\s9973\nElapsed\stime:\s\d+\.\d+\n$/x, + q(shared_ref.pasm) => qq(), + q(stress.pasm) => qr/^A\stotal\sof\s\d+\sDOD\sruns\s + were\smade\n$/x, + q(stress1.pasm) => qr/^\d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\.\d+\n + A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n$/x, + q(stress2.pasm) => qq(), + q(stress3.pasm) => qr/^A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n + \d+\sactive\sPMCs\n + \d+\stotal\s\sPMCs\n$/x, + q(vpm.imc) => qq(100000\nl hackerjust another per\n) +); + +my %filters = ( q(array_access.imc) => \&array_access_imc_filter ); + +sub array_access_imc_filter { + $_[ 0 ] =~ s/arr_size = S1/arr_size = 1000/; +} + +plan tests => scalar keys %outputs; + +foreach ( sort keys %outputs ) { + SKIP: { + my $bench; + eval { + my $file = q(examples/benchmarks/) . $_; + open( BENCH, qq(examples/benchmarks/$_) ) + or die qq(Couldn't open $_: $!.\n); + while ( my $line = <BENCH> ) { $bench .= $line; } + close( BENCH ); + + if ( exists $filters{ $_ } ) { + &{ $filters{ $_ } }( $bench ); + } + }; + skip( $@, 1 ) if $@; + + if ( ref $outputs{ $_ } eq q(Regexp) ) { + if ( /\.pasm$/ ) { + output_like( $bench, $outputs{ $_ }, $_ ); + } + elsif ( /\.imc$/ ) { + pir_output_like( $bench, $outputs{ $_ }, $_ ); + } + else { + skip( qq(Unknown file type: $_.), 1 ); + } + } + else { + if ( /\.pasm$/ ) { + output_is( $bench, $outputs{ $_ }, $_ ); + } + elsif ( /\.imc$/ ) { + pir_output_is( $bench, $outputs{ $_ }, $_ ); + } + else { + skip( qq(Unknown file type: $_.), 1 ); + } + } + } +} +