It Works, *AND* Its Fast(er)
[gitmo/Moose.git] / benchmarks / type_constraints.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Benchmark qw[cmpthese];
7
8 =pod
9
10 This benchmark compares the overhead of a 
11 auto-created type constraint vs. none at 
12 all vs. a custom-created type.
13
14 =cut
15
16 {
17     package Foo;
18     use Moose;
19     use Moose::Util::TypeConstraints;
20     
21     has 'baz' => (is => 'rw');
22     has 'bar' => (is => 'rw', isa => 'Foo');
23     #has 'boo' => (is => 'rw', isa => type 'CustomFoo' => where { blessed($_) && $_->isa('Foo') });
24 }
25
26 {
27     package Bar;
28     
29     sub new { bless {} => __PACKAGE__ }
30     sub bar { 
31         my $self = shift;
32         $self->{bar} = shift if @_;
33         $self->{bar};
34     }
35 }
36
37 my $foo = Foo->new;
38 my $bar = Bar->new;
39
40 cmpthese(200_000, 
41     {
42         'hand coded' => sub {
43             $bar->bar($bar);
44         },
45         'w/out_constraint' => sub {
46             $foo->baz($foo);
47         },
48         'w_constraint' => sub {
49             $foo->bar($foo);            
50         },
51         #'w_custom_constraint' => sub {
52         #    $foo->boo($foo);            
53         #},        
54     }
55 );
56
57 1;