Add accessor benchmarks
[gitmo/Class-MOP.git] / bench / lib / Bench / Run.pm
CommitLineData
b07c7a9d 1#!/usr/bin/perl
2
3package Bench::Run;
4use Moose;
5
6use Benchmark qw/:hireswallclock :all/;
7
8has classes => (
9 isa => "ArrayRef",
10 is => "rw",
11 auto_deref => 1,
12);
13
14has benchmarks => (
15 isa => "ArrayRef",
16 is => "rw",
17 auto_deref => 1,
18);
19
20has min_time => (
21 isa => "Num",
22 is => "rw",
23 default => 5,
24);
25
26sub 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__