#!/usr/bin/perl use strict; use warnings; use lib 'lib'; use Benchmark; use Data::Dumper; use Say; use CA::Normal; use CA; use CA::Fast; use CA::Data; use CA::Lvalue; use CA::LvalueFast; use CA::Assert; use CA::Auto; use CA::Deep; my $r = Benchmark::timethese(100000, { Normal => \&normal_test, CA => \&ca_test, Fast => \&fast_test, Data => \&data_test, Lvalue => \&lvalue_test, LvalueFast => \&lvalue_fast_test, Assert => \&assert_test, Auto => \&auto_test, Deep => \&deep_test, }); warn "\n"; Benchmark::cmpthese $r; sub normal_test { my $c = CA::Normal->new; $c->{name} = 'hoge'; $c->{conf} = { fuga => 'funga' }; $c->{say} = Say->new; my $name = $c->{name}; my $fuga = $c->{conf}{fuga}; my $what = $c->{say}->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub ca_test { my $c = CA->new; $c->name('hoge'); $c->conf({ fuga => 'funga' }); $c->say(Say->new); my $name = $c->name; my $fuga = $c->conf->{fuga}; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub fast_test { my $c = CA::Fast->new; $c->name('hoge'); $c->conf({ fuga => 'funga' }); $c->say(Say->new); my $name = $c->name; my $fuga = $c->conf->{fuga}; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub data_test { my $c = CA::Data->new; $c->name('hoge'); $c->conf({ fuga => 'funga' }); $c->say(Say->new); my $name = $c->name; my $fuga = $c->conf->{fuga}; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub lvalue_test { my $c = CA::Lvalue->new; $c->name = 'hoge'; $c->conf = { fuga => 'funga' }; $c->say = Say->new; my $name = $c->name; my $fuga = $c->conf->{fuga}; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub lvalue_fast_test { my $c = CA::LvalueFast->new; $c->name = 'hoge'; $c->conf = { fuga => 'funga' }; $c->say = Say->new; my $name = $c->name; my $fuga = $c->conf->{fuga}; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub assert_test { my $c = CA::Assert->new; $c->name('hoge'); $c->conf({ fuga => 'funga' }); $c->say(Say->new); my $name = $c->name; my $fuga = $c->conf->{fuga}; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub auto_test { my $c = CA::Auto->new; $c->name('hoge'); $c->conf({ fuga => 'funga' }); $c->say(Say->new); my $name = $c->name; my $fuga = $c->conf->{fuga}; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; } sub deep_test { my $c = CA::Deep->new; $c->name('hoge'); $c->conf({ fuga => 'funga' }); $c->say(Say->new); my $name = $c->name; my $fuga = $c->conf->fuga; my $what = $c->say->hello(); # print Dumper [ $c, $name, $fuga, $what ]; }