Resolve skipped tests (for 5.6.2)
[gitmo/Mouse.git] / benchmarks / vs_caf.pl
CommitLineData
1e582397 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
26use Benchmark qw(cmpthese);
27
28my $moose = PlainMoose->new;
29my $mouse = PlainMouse->new;
30my $caf = ClassAccessorFast->new;
31
32
33print "\nSETTING\n";
34cmpthese(-1, {
35 Moose => sub { $moose->foo(23) },
36 Mouse => sub { $mouse->foo(23) },
37 ClassAccessorFast => sub { $caf->foo(23) },
38}, 'noc');
39
40print "\nGETTING\n";
41cmpthese(-1, {
42 Moose => sub { $moose->foo },
43 Mouse => sub { $mouse->foo },
44 ClassAccessorFast => sub { $caf->foo },
45}, 'noc');
46
47my (@moose, @moose_immut, @mouse, @mouse_immut, @caf_stall);
48print "\nCREATION\n";
49cmpthese(1_000_000, {
50 Moose => sub { push @moose, PlainMoose->new(foo => 23) },
51 Mouse => sub { push @mouse, PlainMouse->new(foo => 23) },
52 ClassAccessorFast => sub { push @caf_stall, ClassAccessorFast->new({foo => 23}) },
53}, 'noc');
54
55my ( $moose_idx, $mouse_idx, $caf_idx ) = ( 0, 0, 0, 0 );
56print "\nDESTRUCTION\n";
57cmpthese(1_000_000, {
58 Moose => sub {
59 $moose[$moose_idx] = undef;
60 $moose_idx++;
61 },
62 Mouse => sub {
63 $mouse[$mouse_idx] = undef;
64 $mouse_idx++;
65 },
66 ClassAccessorFast => sub {
67 $caf_stall[$caf_idx] = undef;
68 $caf_idx++;
69 },
70}, 'noc');
71
72