X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=benchmarks%2Fcoercion.pl;fp=benchmarks%2Fcoercion.pl;h=a473303d18c4d8b6c95adc4429539d714b7d2961;hb=d03295d720223421e5878677fd4cb66b62f92a67;hp=0000000000000000000000000000000000000000;hpb=62225dfe344ee4caa7706570303159a775c07273;p=gitmo%2FMouse.git diff --git a/benchmarks/coercion.pl b/benchmarks/coercion.pl new file mode 100755 index 0000000..a473303 --- /dev/null +++ b/benchmarks/coercion.pl @@ -0,0 +1,58 @@ +#!perl +use strict; +use warnings; +use Benchmark qw/cmpthese/; + + +for my $klass (qw/Moose Mouse/) { + eval qq{ + package ${klass}One; + use $klass; + use ${klass}::Util::TypeConstraints; + + subtype 'NaturalNumber', as 'Int', where { \$_ > 0 }; + + coerce 'NaturalNumber', + from 'Str', via { 42 }, + ; + + has n => ( + is => 'rw', + isa => 'NaturalNumber', + coerce => 1, + ); + no $klass; + __PACKAGE__->meta->make_immutable; + }; + die $@ if $@; +} + +print "Class::MOP: $Class::MOP::VERSION\n"; +print "Moose: $Moose::VERSION\n"; +print "Mouse: $Mouse::VERSION\n"; +print "---- new\n"; +cmpthese( + -1 => { + map { my $x = $_; $_ => sub { $x->new(n => 'foo') } } + map { "${_}One" } + qw/Moose Mouse/ + } +); + +print "---- new,set\n"; +cmpthese( + -1 => { + map { my $y = $_; $_ => sub { $y->new(n => 'foo')->n('bar') } } + map { "${_}One" } + qw/Moose Mouse/ + } +); + +print "---- set\n"; +my %c = map { $_ => "${_}One"->new(n => 'foo') } qw/Moose Mouse/; +cmpthese( + -1 => { + map { my $y = $_; $_ => sub { $c{$y}->n('bar') } } + qw/Moose Mouse/ + } +);