2 # Copyright (C) 2006, The Perl Foundation.
7 use lib qw( lib . ../lib ../../lib );
14 t/benchmark/benchmarks.t - test scripts in examples/benchmarks
18 prove t/benchmark/benchmarks.t
22 Called by 'make benchmark_tests'.
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().
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
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
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
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
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
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
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
179 q{stress1.pasm} => qr/^\d+\.\d+\n
180 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
182 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
184 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
186 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
188 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
190 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
192 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
194 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\n
196 A\stotal\sof\s\d+\sDOD\sruns\swere\smade\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
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.
209 plan tests => scalar keys %outputs;
211 foreach ( sort keys %outputs ) {
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 );
222 example_output_is( "examples/benchmarks/$_", $outputs{$_}, @todo );
229 # cperl-indent-level: 4
232 # vim: expandtab shiftwidth=4: