Move ::Meta::Module::namespace into XS
[gitmo/Mouse.git] / benchmarks / basic.pl
1 #!perl
2 use strict;
3 use warnings;
4 use Benchmark qw/cmpthese/;
5
6 for my $klass (qw/Moose Mouse/) {
7     eval qq{
8         package ${klass}One;
9         use $klass;
10         has n => (
11             is     => 'rw',
12             isa    => 'Int',
13         );
14         has m => (
15             is      => 'rw',
16             isa     => 'Int',
17             default => 42,
18         );
19         no $klass;
20         __PACKAGE__->meta->make_immutable;
21     };
22     die $@ if $@;
23 }
24
25 print "Class::MOP: $Class::MOP::VERSION\n";
26 print "Moose:      $Moose::VERSION\n";
27 print "Mouse:      $Mouse::VERSION\n";
28 print "---- new\n";
29 cmpthese(
30     -1 => {
31         map { my $x = $_; $_ => sub { $x->new(n => 3) } }
32         map { "${_}One" }
33         qw/Moose Mouse/
34     }
35 );
36
37 print "---- new,set\n";
38 cmpthese(
39     -1 => {
40         map { my $y = $_; $_ => sub { $y->new(n => 3)->n(5) } }
41         map { "${_}One" }
42         qw/Moose Mouse/
43     }
44 );
45
46 print "---- set\n";
47 my %c = map { $_ => "${_}One"->new(n => 3) } qw/Moose Mouse/;
48 cmpthese(
49     -1 => {
50         map { my $y = $_; $_ => sub { $c{$y}->n(5) } }
51         qw/Moose Mouse/
52     }
53 );
54
55 print "---- get\n";
56 cmpthese(
57     -1 => {
58         map { my $y = $_; $_ => sub { $c{$y}->n() } }
59         qw/Moose Mouse/
60     }
61 );
62