-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbench.pl
executable file
·84 lines (72 loc) · 2.81 KB
/
bench.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env perl
# Benchmark the performance of various packages that implement support for OOP
# in Perl.
use 5.020;
use common::sense;
use Benchmark qw(:all);
use workload;
use oop::vanilla;
use oop::vanilla_sig;
use oop::moose;
use oop::moose_sig;
use oop::moosex;
use oop::moosex_sig;
use oop::moops;
use oop::moops_moose;
my $procedural;
my $vanilla;
my $vanilla_sig;
my $moose;
my $moose_sig;
my $moosex;
my $moosex_sig;
my $moops;
my $moops_moose;
my $prop;
my %new_tests =
(vanilla => sub { $vanilla = oop::vanilla->new(name => 'vanilla') },
vanilla_sig => sub { $vanilla_sig = oop::vanilla_sig->new(name => 'vanilla_sig') },
moose => sub { $moose = oop::moose->new(name => 'moose') },
moose_sig => sub { $moose_sig = oop::moose_sig->new(name => 'moose_sig') },
moosex => sub { $moosex = oop::moosex->new(name => 'moosex') },
moosex_sig => sub { $moosex_sig = oop::moosex_sig->new(name => 'moosex_sig') },
moops => sub { $moops = oop::moops->new(name => 'moops') },
moops_moose => sub { $moops_moose = oop::moops_moose->new(name => 'moops_moose') });
my %call_tests =
(vanilla => sub { $vanilla->run() },
vanilla_sig => sub { $vanilla_sig->run() },
moose => sub { $moose->run() },
moose_sig => sub { $moose_sig->run() },
moosex => sub { $moosex->run() },
moosex_sig => sub { $moosex_sig->run() },
moops => sub { $moops->run() },
moops_moose => sub { $moops_moose->run() },
direct => sub { workload->run() });
my %call_tests_arg1 =
(vanilla => sub { $vanilla->run_arg1(5) },
vanilla_sig => sub { $vanilla_sig->run_arg1(5) },
moose => sub { $moose->run_arg1(5) },
moose_sig => sub { $moose_sig->run_arg1(5) },
moosex => sub { $moosex->run_arg1(5) },
moosex_sig => sub { $moosex_sig->run_arg1(5) },
moops => sub { $moops->run_arg1(5) },
moops_moose => sub { $moops_moose->run_arg1(5) },
direct => sub { workload->run_arg1(5) });
my %prop_tests =
(vanilla => sub { $prop = scalar $vanilla->result },
vanilla_sig => sub { $prop = scalar $vanilla_sig->result },
moose => sub { $prop = scalar $moose->result },
moose_sig => sub { $prop = scalar $moose_sig->result },
moosex => sub { $prop = scalar $moosex->result },
moosex_sig => sub { $prop = scalar $moosex_sig->result },
moops => sub { $prop = scalar $moops->result },
moops_moose => sub { $prop = scalar $moops_moose->result },
direct => sub { $prop = scalar $vanilla->{result} });
say "testing new...";
cmpthese(0, \%new_tests);
say "\ntesting method call...";
cmpthese(0, \%call_tests);
say "\ntesting method call with one arg...";
cmpthese(0, \%call_tests_arg1);
say "\ntesting properties...";
cmpthese(0, \%prop_tests);