diff options
Diffstat (limited to 'benchmarks/immutable.pl')
-rw-r--r-- | benchmarks/immutable.pl | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/benchmarks/immutable.pl b/benchmarks/immutable.pl new file mode 100644 index 0000000..0263404 --- /dev/null +++ b/benchmarks/immutable.pl @@ -0,0 +1,99 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Benchmark qw[cmpthese]; + +use Moose::Util::TypeConstraints; + +{ + 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 '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); + + 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 '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); + + #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(10_000, + { + 'normal' => sub { + Foo::Normal->new( + required => 'BAR', + type_constraint => $foo, + coercion => [], + weak_ref => {}, + ); + }, + 'immutable' => sub { + Foo::Immutable->new( + required => 'BAR', + type_constraint => $foo, + coercion => [], + weak_ref => {}, + ); + }, + } +);
\ No newline at end of file |