Ambrosia
view release on metacpan or search on metacpan
benchmark/Ambrosia/Meta.b view on Meta::CPAN
#!/usr/bin/perl
{
package Foo;
use strict;
use warnings;
use lib qw(lib t ..);
use Ambrosia::Event qw/on_run/;
use Ambrosia::Meta;
class
{
public => [qw/Name Age/],
protected => [qw/State/],
};
sub getState
{
return $_[0]->State;
}
1;
}
{
package FooSealed;
use strict;
use warnings;
use lib qw(lib t ..);
use Ambrosia::Event qw/on_run/;
use Ambrosia::Meta;
class sealed
{
public => [qw/Name Age/],
protected => [qw/State/],
};
sub getState
{
return $_[0]->State;
}
1;
}
{
package Vanilla;
use strict;
use warnings;
use lib qw(lib t ..);
use Ambrosia::Event qw/on_run/;
sub new
{
my $proto = shift;
my $class = ref $proto || $proto;
my %self = @_;
return bless \%self, $class;
};
sub getState
{
return $_[0]->{State};
}
1;
}
{
package main;
use warnings;
use strict;
use lib qw(lib t);
use Dog;
use Benchmark qw(:all);
my $dog = new Dog(Name => 'John Smit', Age => 33, State => 'new', Foo=>123);
my $foo = new Foo(Name => 'John Smit', Age => 33, State => 'new');
my $fooSealed = new FooSealed(Name => 'John Smit', Age => 33, State => 'new');
my $vanilla = new Vanilla(Name => 'John Smit', Age => 33, State => 'new');
my $NUM_ITER = 100_000;
cmpthese($NUM_ITER, {
'foo_new' => sub {my $foo = new Foo(Name => 'John Smit', Age => 33, State => 'new');},
'fooSealed_new' => sub {my $fooSealed = new FooSealed(Name => 'John Smit', Age => 33, State => 'new');},
'vanilla_new' => sub {my $vanilla = new Vanilla(Name => 'John Smit', Age => 33, State => 'new');},
'moose_new' => sub {my $dog = new Dog(Name => 'John Smit', Age => 33, State => 'new');},
});
#exit;
$NUM_ITER = 1000_000;
cmpthese($NUM_ITER, {
'foo_field' => sub {my $age = $foo->Age;},
'fooSealed_field' => sub {my $age = $fooSealed->Age;},
'vanilla_field' => sub {my $age = $vanilla->{Age};},
'moose_new' => sub {my $age = $dog->Age();},
});
cmpthese($NUM_ITER, {
'foo_method' => sub {my $state = $foo->getState;},
'fooSealed_method' => sub {my $state = $fooSealed->getState;},
'vanilla_method' => sub {my $state = $vanilla->{State};},
});
}
( run in 0.554 second using v1.01-cache-2.11-cpan-ceb78f64989 )