Implement strict constructors, which will warn unkown constructor arguments
[gitmo/Mouse.git] / benchmarks / vs_caf.pl
1 #!perl
2
3 ### MODULES
4
5
6 {
7     package PlainMoose;
8     use Moose;
9     has foo => (is => 'rw');
10     __PACKAGE__->meta->make_immutable();
11 }
12 {
13     package PlainMouse;
14     use Mouse;
15     has foo => (is => 'rw');
16     __PACKAGE__->meta->make_immutable();
17 }
18 {
19     package ClassAccessorFast;
20     use warnings;
21     use strict;
22     use base 'Class::Accessor::Fast';
23     __PACKAGE__->mk_accessors(qw(foo));
24 }
25
26 use Benchmark qw(cmpthese);
27
28 my $moose                = PlainMoose->new;
29 my $mouse                = PlainMouse->new;
30 my $caf                  = ClassAccessorFast->new;
31
32
33 print "\nSETTING\n";
34 cmpthese(-1, {
35     Moose                       => sub { $moose->foo(23) },
36     Mouse                       => sub { $mouse->foo(23) },
37     ClassAccessorFast           => sub { $caf->foo(23) },
38 }, 'noc');
39
40 print "\nGETTING\n";
41 cmpthese(-1, {
42     Moose                       => sub { $moose->foo },
43     Mouse                       => sub { $mouse->foo },
44     ClassAccessorFast           => sub { $caf->foo },
45 }, 'noc');
46
47 print "\nCREATION AND DESTRUCTION\n";
48 cmpthese(-1, {
49     Moose                       => sub { my $x = PlainMoose->new(foo => 23) },
50     Mouse                       => sub { my $x = PlainMouse->new(foo => 23) },
51     ClassAccessorFast           => sub { my $x = ClassAccessorFast->new({foo => 23}) },
52 }, 'noc');