summaryrefslogtreecommitdiff
path: root/benchmarks/immutable.pl
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2015-06-06 17:50:16 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2015-06-06 17:50:16 +0000
commit5ac2026f7eed78958d69d051e7a8e993dcf51205 (patch)
tree298c3d2f08bdfe5689998b11892d72a897985be1 /benchmarks/immutable.pl
downloadMoose-tarball-5ac2026f7eed78958d69d051e7a8e993dcf51205.tar.gz
Diffstat (limited to 'benchmarks/immutable.pl')
-rw-r--r--benchmarks/immutable.pl99
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