tagged release 0.6.4
[parrot.git] / t / benchmark / benchmarks.t
blob7b3adae9853ad3ab3fea5210713f3d5e5e6cab7b
1 #!perl
2 # Copyright (C) 2006, The Perl Foundation.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( lib . ../lib ../../lib );
9 use Parrot::Test;
10 use Test::More;
12 =head1 NAME
14 t/benchmark/benchmarks.t - test scripts in examples/benchmarks
16 =head1 SYNOPSIS
18     prove t/benchmark/benchmarks.t
20 =head1 DESCRIPTION
22 Called by 'make benchmark_tests'.
24 =cut
26 # Expected output from scripts in 'examples/benchmarks'.
27 # The expected out is needed for checking results with pir_output_is() and pir_output_like().
28 my %outputs = (
29     q{addit.pir}        => qq(2.10011e+07\n),
30     q{addit.pasm}       => qq(21001097.970000\n),
31     q{addit2.pir}       => qq(2.10011e+07\n),
32     q{array_access.pir} => qr/
33 1\s\*\s1000\s=\s1000\n
34 100\s\*\s1000\s=\s100000\n
35 Array:\s\d+\.\d+s\n
37 1\s\*\s1000\s=\s1000\n
38 100\s\*\s1000\s=\s100000\n
39 FixedFloatArray:\s\d+\.\d+s\n
41 1\s\*\s1000\s=\s1000\n
42 100\s\*\s1000\s=\s100000\n
43 FixedIntegerArray:\s\d+\.\d+s\n
45 1\s\*\s1000\s=\s1000\n
46 100\s\*\s1000\s=\s100000\n
47 FixedPMCArray:\s\d+\.\d+s\n
49 1\s\*\s1000\s=\s1000\n
50 100\s\*\s1000\s=\s100000\n
51 FixedStringArray:\s\d+\.\d+s\n
53 1\s\*\s1000\s=\s1000\n
54 100\s\*\s1000\s=\s100000\n
55 IntList:\s\d+\.\d+s\n
57 1\s\*\s1000\s=\s1000\n
58 100\s\*\s1000\s=\s100000\n
59 ResizableFloatArray:\s\d+\.\d+s\n
61 1\s\*\s1000\s=\s1000\n
62 100\s\*\s1000\s=\s100000\n
63 ResizableIntegerArray:\s\d+\.\d+s\n
65 1\s\*\s1000\s=\s1000\n
66 100\s\*\s1000\s=\s100000\n
67 ResizablePMCArray:\s\d+\.\d+s\n
69 1\s\*\s1000\s=\s1000\n
70 100\s\*\s1000\s=\s100000\n
71 ResizableStringArray:\s\d+\.\d+s\n
73 1\s\*\s1000\s=\s1000\n
74 100\s\*\s1000\s=\s100000\n
75 SArray:\s\d+\.\d+s\n
76 \s+$/x,
77     q{arriter.pir}     => qq(100000\n100000\n100000\n111111\n),
78     q{arriter_o1.pir}  => qq(100000\n100000\n100000\n111111\n),
79     q{bench_newp.pasm} => qr/^\d+\.\d+\sseconds.\s\d+\.\d+\sloops\/sec\n
80         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
81         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
82         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
83         Copying\sa\stotal\sof\s\d+\sbytes\n
84         There\sare\s\d+\sactive\sPMC\sstructs\n
85         There\sare\s\d+\stotal\sPMC\sstructs\n
86         There\sare\s\d+\sactive\sBuffer\sstructs\n
87         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
88     q{fib.pir}     => qr/^fib\(28\)\s=\s317811\s\d+\.\d+s$/x,
89     q{freeze.pasm} => qr/^constr.time\s\d+\.\d+\n
90         freeze\stime\s\d+\.\d+\n
91         \s\sthaw\stime\s\d+\.\d+\n
92         Image\slen\s\d+\n
93         ResizablePMCArray\s100000\n$/x,
94     q{gc_alloc_new.pasm} => qr/^\d+\.\d+\sseconds\.\n
95         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
96         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
97         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
98         Copying\sa\stotal\sof\s\d+\sbytes\n
99         There\sare\s\d+\sactive\sBuffer\sstructs\n
100         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
101     q{gc_alloc_reuse.pasm} => qr/^\d+\.\d+\sseconds\.\n
102         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
103         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
104         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
105         Copying\sa\stotal\sof\s\d+\sbytes\n
106         There\sare\s\d+\sactive\sBuffer\sstructs\n
107         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
108     q{gc_generations.pasm} => qr/^\d+\.\d+\sseconds\.\n
109         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
110         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
111         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
112         Copying\sa\stotal\sof\s\d+\sbytes\n
113         There\sare\s\d+\sactive\sBuffer\sstructs\n
114         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
115     q{gc_header_new.pasm} => qr/^\d+\.\d+\sseconds\.\n
116         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
117         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
118         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
119         Copying\sa\stotal\sof\s\d+\sbytes\n
120         There\sare\s\d+\sactive\sBuffer\sstructs\n
121         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
122     q{gc_header_reuse.pasm} => qr/^\d+\.\d+\sseconds\.\n
123         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
124         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
125         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
126         Copying\sa\stotal\sof\s\d+\sbytes\n
127         There\sare\s\d+\sactive\sBuffer\sstructs\n
128         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
129     q{gc_waves_headers.pasm} => qr/^\d+\.\d+\sseconds\.\n
130         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
131         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
132         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
133         Copying\sa\stotal\sof\s\d+\sbytes\n
134         There\sare\s\d+\sactive\sBuffer\sstructs\n
135         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
136     q{gc_waves_sizeable_data.pasm} => qr/^\d+\.\d+\sseconds\.\n
137         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
138         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
139         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
140         Copying\sa\stotal\sof\s\d+\sbytes\n
141         There\sare\s\d+\sactive\sBuffer\sstructs\n
142         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
143     q{gc_waves_sizeable_headers.pasm} => qr/^\d+\.\d+\sseconds\.\n
144         A\stotal\sof\s\d+\sbytes\swere\sallocated\n
145         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
146         A\stotal\sof\s\d+\scollection\sruns\swere\smade\n
147         Copying\sa\stotal\sof\s\d+\sbytes\n
148         There\sare\s\d+\sactive\sBuffer\sstructs\n
149         There\sare\s\d+\stotal\sBuffer\sstructs\n$/x,
150     q{mops.pasm} => qr/^Iterations:\s\s\s\s10000000\n
151         Estimated\sops:\s20000000\n
152         done\n
153         Elapsed\stime:\s\s\d+\.\d+\n
154         M\sop\/s:\s\s\s\s\s\s\s\s\d+\.\d+\n$/x,
155     q(mops_intval.pasm) => qr/^Iterations:\s\s\s\s100000000\n
156         Estimated\sops:\s200000000\n
157         Elapsed\stime:\s\s\d+\.\d+\n
158         M\sop\/s:\s\s\s\s\s\s\s\s\d+\.\d+\n$/x,
159     q{oo1.pasm}     => qq(10\n),
160     q{oo2.pasm}     => qq(10\n),
161     q{oo3.pasm}     => qq(10\n),
162     q{oo4.pasm}     => qq(500000\n),
163     q{oo5.pir}      => qq(10\n),
164     q{oo6.pir}      => qq(500000\n),
165     q{oofib.pir}    => qr/^fib\(28\)\s=\s317811\s\d+\.\d+s$/x,
166     q{overload.pir} => qq(42\n),
167     q{primes.pasm}  => qr/^N\sprimes\sup\sto\s10000\sis:\s1229\n
168         last\sis:\s10001\n
169         Elapsed\stime:\s\d+\.\d+\n$/x,
170     q{primes2.pir} => qr/^N\sprimes\scalculated\sto\s5000\sis\s670\n
171         last\sis:\s4999\n$/x,
172     q{primes2_i.pir} => qr/^N\sprimes\scalculated\sto\s10000\s
173         is\s1230\nlast\sis:\s9973\n$/x,
174     q{primes_i.pasm} => qr/^N\sprimes\sup\sto\s10000\sis:\s1229\n
175         last\sis:\s9973\nElapsed\stime:\s\d+\.\d+\n$/x,
176     q{shared_ref.pasm} => qq(),
177     q{stress.pasm}     => qr/^A\stotal\sof\s\d+\sDOD\sruns\s
178         were\smade\n$/x,
179     q{stress1.pasm} => qr/^\d+\.\d+\n
180         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
181         \d+\.\d+\n
182         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
183         \d+\.\d+\n
184         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
185         \d+\.\d+\n
186         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
187         \d+\.\d+\n
188         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
189         \d+\.\d+\n
190         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
191         \d+\.\d+\n
192         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
193         \d+\.\d+\n
194         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
195         \d+\.\d+\n
196         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
197         \d+\.\d+\n
198         A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n$/x,
199     q{stress2.pasm} => qq(),
200     q{stress3.pasm} => qr/^A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
201         \d+\sactive\sPMCs\n
202         \d+\stotal\s\sPMCs\n$/x,
203     q{vpm.pir} => qq(100000;\nl hackerjust another per\n)
206 # These scripts are known to be failing.
207 my %todo = ();
209 plan tests => scalar keys %outputs;
211 foreach ( sort keys %outputs ) {
212 SKIP: {
213         my $bench = Parrot::Test::slurp_file("examples/benchmarks/$_");
214         skip( "Could not slurp $_", 1 ) unless $bench;
216         my @todo = $todo{$_} ? ( todo => $todo{$_} ) : ();
218         if ( ref $outputs{$_} eq 'Regexp' ) {
219             example_output_like( "examples/benchmarks/$_", $outputs{$_}, @todo );
220         }
221         else {
222             example_output_is( "examples/benchmarks/$_", $outputs{$_}, @todo );
223         }
224     }
227 # Local Variables:
228 #   mode: cperl
229 #   cperl-indent-level: 4
230 #   fill-column: 100
231 # End:
232 # vim: expandtab shiftwidth=4: