X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=benchmarks%2Fimmutable.pl;h=8118511dd89a1047705a90ec2fa9ae6f8baf138b;hb=4d9b02de0f2b87a7e1f8f87d8725174cf4412b16;hp=c9ad53879da100349e9ebfe652999441dc8032cc;hpb=5cf3dbcf66d39c700f7b66a20c9bc7e2bbc025ab;p=gitmo%2FMoose.git diff --git a/benchmarks/immutable.pl b/benchmarks/immutable.pl index c9ad538..8118511 100644 --- a/benchmarks/immutable.pl +++ b/benchmarks/immutable.pl @@ -8,70 +8,92 @@ use Benchmark qw[cmpthese]; use Moose::Util::TypeConstraints; -BEGIN { - subtype 'Foo' => as 'Object' => where { blessed($_) && $_->isa('Foo') }; - - coerce 'Foo' - => from 'ArrayRef' - => via { Foo->new(@{$_}) }; -} - { package Foo; use Moose; + Foo->meta->make_immutable(debug => 0); } +coerce 'Foo' + => from 'ArrayRef' + => via { Foo->new(@{$_}) }; + { package Foo::Normal; use Moose; has 'default' => (is => 'rw', default => 10); - has 'default_sub' => (is => 'rw', default => sub { [] }); + has 'default_sub' => (is => 'rw', default => sub { [] }); has 'lazy' => (is => 'rw', default => 10, lazy => 1); - has 'required' => (is => 'rw', required => 1); - has 'weak_ref' => (is => 'rw', weak_ref => 1); - has 'type_constraint' => (is => 'rw', isa => 'Foo'); - has 'coercion' => (is => 'rw', isa => 'Foo', coerce => 1); - + has 'required' => (is => 'rw', required => 1); + has 'weak_ref' => (is => 'rw', weak_ref => 1); + has 'type_constraint' => (is => 'rw', isa => 'Foo'); + has 'coercion' => (is => 'rw', isa => 'Foo', coerce => 1); + + package Bar::Normal; + use Moose; + + extends 'Foo::Normal'; + + has 'default_w_type_constraint' => ( + is => 'rw', + isa => 'Int', + default => 10, + ); } { package Foo::Immutable; use Moose; - + has 'default' => (is => 'rw', default => 10); - has 'default_sub' => (is => 'rw', default => sub { [] }); + has 'default_sub' => (is => 'rw', default => sub { [] }); has 'lazy' => (is => 'rw', default => 10, lazy => 1); - has 'required' => (is => 'rw', required => 1); - has 'weak_ref' => (is => 'rw', weak_ref => 1); - has 'type_constraint' => (is => 'rw', isa => 'Foo'); + has 'required' => (is => 'rw', required => 1); + has 'weak_ref' => (is => 'rw', weak_ref => 1); + has 'type_constraint' => (is => 'rw', isa => 'Foo'); has 'coercion' => (is => 'rw', isa => 'Foo', coerce => 1); - - sub BUILD { - # ... - } - - Foo::Immutable->meta->make_immutable(debug => 1); + + #sub BUILD { + # # ... + #} + + Foo::Immutable->meta->make_immutable(debug => 0); + + package Bar::Immutable; + use Moose; + + extends 'Foo::Immutable'; + + has 'default_w_type_constraint' => ( + is => 'rw', + isa => 'Int', + default => 10, + ); + + Bar::Immutable->meta->make_immutable(debug => 0); } #__END__ my $foo = Foo->new; -cmpthese(500, +cmpthese(10_000, { 'normal' => sub { Foo::Normal->new( required => 'BAR', type_constraint => $foo, - #coercion => [], + coercion => [], + weak_ref => {}, ); }, 'immutable' => sub { Foo::Immutable->new( required => 'BAR', type_constraint => $foo, - #coercion => [], + coercion => [], + weak_ref => {}, ); }, }