]> git.vpit.fr Git - perl/modules/with.git/blob - samples/bench.pl
Update VPIT::TestHelpers to 15e8aee3
[perl/modules/with.git] / samples / bench.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Benchmark qw<cmpthese>;
7
8 use lib 'blib/lib';
9
10 my $counter;
11 my @poultry = (qw<cock chick>);
12
13 sub Duck::quack { $counter += $_[0]->{id} * $_[0] }
14 sub fly { $counter += $_[0]; }
15 sub Duck::unshift { CORE::unshift @poultry, $_[0]->{id} * $_[3] }
16 sub Duck::pop     { CORE::pop @poultry }
17
18 my $duck = bless { id => 0.7 }, 'Duck';
19
20 cmpthese -2, {
21  explicit => sub { $duck->quack(3); },
22  with     => sub {
23   use with \$duck;
24   quack -3;
25  }
26 };
27
28 cmpthese -2, {
29  direct   => sub { fly(2); },
30  deferred => sub {
31   use with \$duck;
32   fly -2;
33  }
34 };
35
36 cmpthese -2, {
37  core    => sub { push @poultry, 1; shift @poultry; },
38  wrapped => sub {
39   use with \$duck;
40   push @poultry, 1; shift @poultry;
41  }
42 };
43
44 cmpthese -2, {
45  core      => sub { unshift @poultry, $duck->{id} * 5; pop @poultry; },
46  flattened => sub {
47   use with \$duck;
48   unshift @poultry, -5; pop @poultry;
49  }
50 };