File: sort_by.pl

package info (click to toggle)
libmousex-nativetraits-perl 1.09-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 480 kB
  • sloc: perl: 5,073; makefile: 7
file content (55 lines) | stat: -rw-r--r-- 1,141 bytes parent folder | download | duplicates (4)
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
#!perl -w

use strict;
use Benchmark qw(:all);

use Digest::MD5 qw(md5_hex);

print "Benchmark for native traits (Array)\n";

{
    package MouseList;
    use Mouse;

    has list => (
        traits => ['Array'],

        is  => 'rw',

        handles => {
            sort      => 'sort',
            sort_by   => 'sort_by',
        },
        default => sub{ [] },
    );

    __PACKAGE__->meta->make_immutable();
}

sub f{
    return md5_hex($_[0]);
}

print "sort_by vs. sort (10 items)\n";
cmpthese -1 => {
    sort_by => sub{
        my $o = MouseList->new(list => [0 .. 10]);
        my @a = $o->sort_by(sub{ f($_) }, sub{ $_[0] cmp $_[1] });
    },
    sort => sub{
        my $o = MouseList->new(list => [0 .. 10]);
        my @a = $o->sort(sub{ f($_[0]) cmp f($_[1]) });
    },
};

print "sort_by vs. sort (100 items)\n";
cmpthese timethese -1 => {
    sort_by => sub{
        my $o = MouseList->new(list => [0 .. 100]);
        my @a = $o->sort_by(sub{ f($_) }, sub{ $_[0] cmp $_[1] });
    },
    sort => sub{
        my $o = MouseList->new(list => [0 .. 100]);
        my @a = $o->sort(sub{ f($_[0]) cmp f($_[1]) });
    },
};