Commit | Line | Data |
b07c7a9d |
1 | #!/usr/bin/perl |
2 | |
3 | package Bench::Run; |
4 | use Moose; |
5 | |
6 | use Benchmark qw/:hireswallclock :all/; |
7 | |
8 | has classes => ( |
9 | isa => "ArrayRef", |
10 | is => "rw", |
11 | auto_deref => 1, |
12 | ); |
13 | |
14 | has benchmarks => ( |
15 | isa => "ArrayRef", |
16 | is => "rw", |
17 | auto_deref => 1, |
18 | ); |
19 | |
20 | has min_time => ( |
21 | isa => "Num", |
22 | is => "rw", |
23 | default => 5, |
24 | ); |
25 | |
26 | sub run { |
27 | my $self = shift; |
28 | |
29 | foreach my $bench ( $self->benchmarks ) { |
5b2d23f3 |
30 | my $bench_class = delete $bench->{class}; |
31 | my $name = delete $bench->{name} || $bench_class; |
32 | my @bench_args = %$bench; |
6698ebe5 |
33 | |
b07c7a9d |
34 | eval "require $bench_class"; |
35 | die $@ if $@; |
6698ebe5 |
36 | |
b07c7a9d |
37 | my %res; |
6698ebe5 |
38 | |
b07c7a9d |
39 | foreach my $class ( $self->classes ) { |
40 | eval "require $class"; |
41 | die $@ if $@; |
6698ebe5 |
42 | |
b07c7a9d |
43 | my $b = $bench_class->new( @bench_args, class => $class ); |
44 | $res{$class} = countit( $self->min_time, $b->code ); |
45 | } |
46 | |
5b2d23f3 |
47 | print "- $name:\n"; |
b07c7a9d |
48 | cmpthese( \%res ); |
49 | print "\n"; |
50 | } |
51 | } |
52 | |
53 | __PACKAGE__; |
54 | |
55 | __END__ |