Commit | Line | Data |
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 | } ); |