initial commit
[urisagit/Sort-Maker.git] / exp / clpmodules_bench.pl
CommitLineData
7468c584 1#!/usr/local/bin/perl
2
3 use Sort::Maker;
4 use Benchmark 'cmpthese';
5
6 sub build_data {
7 my @r_order =
8 map { ('_', 0..9, 'A'..'Z', 'a'..'z')[rand 63] } 1..shift;
9 my @unsorted =
10 map qq|<table><tr><td meascode="$_"></td></tr></table>|,
11 @r_order;
12 my @c_order;
13 push @c_order, splice( @r_order, rand @r_order, 1 )
14 while @r_order;
15 join( '', @c_order ), @unsorted
16 }
17
18 my ($cost_order, @unsorted) = build_data(2);
19
20 my $sorter = make_sorter(
21 'GRT',
22 init_code => "my \$cost_order = '$cost_order';",
23 signed => 1,
24 string_data => 1,
25 number => q{ /code="(.)"/ && index($cost_order,$1) },
26 );
27
28 cmpthese( shift || -5, {
29 'S-Maker' => sub {
30 my @sorted = $sorter->( @unsorted );
31 },
32
33 'S-Maker-compiling' => sub {
34
35 my $sorter = make_sorter(
36 'GRT',
37 init_code => "my \$cost_order = '$cost_order';",
38 signed => 1,
39 string_data => 1,
40 number => q{ /code="(.)"/ && index($cost_order,$1) },
41 );
42 my @sorted = $sorter->( @unsorted );
43 },
44 'grep()' => sub {
45 my $co = $cost_order;
46 my @sorted = ();
47 while ( my $mc = chop $co ) {
48 unshift @sorted, grep /code="$mc"/, @unsorted;
49 }
50 },
51 } );