This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
873f8db0cfcd8b0affb6a1008a15cafd22e7b3d4
[perl5.git] / t / perf / benchmarks.t
1 #!./perl
2 #
3 # Execute the various code snippets in t/perf/benchmarks
4 # to ensure that they are all syntactically correct
5
6 BEGIN {
7     chdir 't';
8     require './test.pl';
9     @INC = ('.', '../lib');
10 }
11
12 use warnings;
13 use strict;
14
15
16 my $file = 'perf/benchmarks';
17 my $benchmark_array = do $file;
18 die $@ if $@;
19 die "$! while trying to read '$file'" if $!;
20 die "'$file' did not return an array ref\n"
21         unless ref $benchmark_array eq 'ARRAY';
22
23 die "Not an even number of key value pairs in '$file'\n"
24         if @$benchmark_array % 2;
25
26 my %benchmarks;
27 while (@$benchmark_array) {
28     my $key  = shift @$benchmark_array;
29     my $hash = shift @$benchmark_array;
30     die "Duplicate key '$key' in '$file'\n" if exists $benchmarks{$key};
31     $benchmarks{$key} = $hash;
32 }
33
34 plan keys(%benchmarks) * 3;
35
36
37 # check the hash of hashes is minimally consistent in format
38
39 for my $token (sort keys %benchmarks) {
40     like($token, qr/^[a-zA-Z](\w|::)+$/a, "legal token: $token");
41     my $keys = join('-', sort keys %{$benchmarks{$token}});
42     is($keys, 'code-desc-setup', "legal keys:  $token");
43 }
44
45 # check that each bit of code compiles and runs
46
47 for my $token (sort keys %benchmarks) {
48     my $b = $benchmarks{$token};
49     my $code = "package $token; $b->{setup}; for (1..1) { $b->{code} } 1;";
50     no warnings;
51     no strict;
52     ok(eval $code, "running $token")
53         or do {
54             diag("code:");
55             diag($code);
56             diag("gave:");
57             diag($@);
58         }
59 }
60
61