P:\test>466286 -N=10
Rate S::M GRT sort
S::M 15958/s -- -22% -60%
GRT 20443/s 28% -- -49%
sort 39790/s 149% 95% --
P:\test>466286 -N=100
Rate S::M GRT sort
S::M 1814/s -- -17% -40%
GRT 2173/s 20% -- -28%
sort 3024/s 67% 39% --
P:\test>466286 -N=1000
Rate S::M GRT sort
S::M 157/s -- -5% -21%
GRT 166/s 6% -- -17%
sort 200/s 27% 20% --
P:\test>466286 -N=10000
Rate S::M sort GRT
S::M 13.2/s -- -2% -3%
sort 13.5/s 2% -- -0%
GRT 13.6/s 3% 0% --
P:\test>466286 -N=100000
Rate sort S::M GRT
sort 0.938/s -- -7% -11%
S::M 1.01/s 7% -- -4%
GRT 1.05/s 12% 4% --
P:\test>466286 -N=1000000
(warning: too few iterations for a reliable count)
(warning: too few iterations for a reliable count)
(warning: too few iterations for a reliable count)
s/iter sort S::M GRT
sort 13.8 -- -8% -22%
S::M 12.7 9% -- -16%
GRT 10.7 29% 19% --
####
#! perl -slw
use strict;
use Benchmark qw[ cmpthese ];
use Sort::Key::Maker sort_num_str =>
sub { /^(\d+)(.*)/ }, qw(num str);
sub log10{ log( $_[ 0 ]) / log( 10 ) }
our $N ||= 1000;
our $CHECK ||= 0;
our $ITERS = $CHECK ? 1 : -int( log10 $N );
our @data = map{ int( rand 1000 ) . ('A'..'Z')[ rand 26 ] } 1 .. $N;
my %tests = (
sort => q[
my @sorted = sort{ $^W=0; $a<=>$b or $a cmp $b } @data;
print "s:@sorted" if $CHECK;
],
'S::M' => q[
my @sorted = sort_num_str @data;
print "S::M:@sorted" if $CHECK;
],
GRT => q[
my @sorted = map {
substr $_, 4
} sort map {
$^W=0;
pack 'NA*', 0+$_, $_
} @data;
print "GRT:@sorted" if $CHECK;
],
);
cmpthese $ITERS, \%tests;
##
##
C:\Perl\packages\Sort-Key-0.10>nmake test
Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation. All rights reserved.
C:\perl5.8.6\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', 'blib\arch')" t\floats.t t\ints.t t\multi.t t\strings.t
t\floats.....ok
t\ints.......ok 3/5
t\ints.......NOK 4# Failed test (t\ints.t at line 17)
# Structures begin differing at:
# $got->[0] = '9.1766357421875'
# $expected->[0] = '9.2138671875'
t\ints.......ok 5/5# Looks like you failed 1 test of 5.
t\ints.......dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 4
Failed 1/5 tests, 80.00% okay
t\multi......ok
t\strings....ok
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t\ints.t 1 256 5 1 20.00% 4
Failed 1/4 test scripts, 75.00% okay. 1/21 subtests failed, 95.24% okay.
NMAKE : fatal error U1077: 'C:\perl5.8.6\bin\perl.exe' : return code '0xff'
Stop.