Reimplemented metaclass traits with Moose::Exporter. This
[gitmo/Moose.git] / benchmarks / immutable.pl
index c9ad538..0e5fab9 100644 (file)
@@ -8,19 +8,16 @@ 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;
@@ -33,6 +30,16 @@ BEGIN {
     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,
+    );
 }
 
 {
@@ -47,31 +54,46 @@ BEGIN {
     has 'type_constraint' => (is => 'rw', isa => 'Foo');    
     has 'coercion'        => (is => 'rw', isa => 'Foo', coerce => 1);
     
-    sub BUILD {
-        # ...
-    }
+    #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,
+    );    
     
-    Foo::Immutable->meta->make_immutable(debug => 1);
+    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        => {},                
             );
         },
     }