initial commit
[urisagit/Sort-Maker.git] / exp / clpmodules_bench.pl
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      } );