stop using excludes within moose, since it's no longer necessary
[gitmo/Moose.git] / benchmarks / immutable.pl
index c9ad538..8118511 100644 (file)
@@ -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        => {},
             );
         },
     }