use strict;
use warnings;
use Hash::Ordered;
use Data::Dumper;
tie my %table, 'Hash::Ordered';
for my $key (qw( a_a b_b c_c d_d e_e )) {
$table{$key}{'pend'} += 1;
$table{$key}{'run'} += 2;
}
print Dumper(\%table), "\n";
####
use strict;
use warnings;
use MCE::Shared::Ordhash;
use Data::Dumper;
tie my %table, 'MCE::Shared::Ordhash';
for my $key (qw( a_a b_b c_c d_d e_e )) {
$table{$key}{'pend'} += 1;
$table{$key}{'run'} += 2;
}
print Dumper(\%table), "\n";
####
$VAR1 = {
'a_a' => {
'run' => 2,
'pend' => 1
},
'b_b' => {
'pend' => 1,
'run' => 2
},
'c_c' => {
'run' => 2,
'pend' => 1
},
'd_d' => {
'run' => 2,
'pend' => 1
},
'e_e' => {
'run' => 2,
'pend' => 1
}
};
####
use strict;
use warnings;
use MCE::Shared::Ordhash;
use Data::Dumper;
my $table = MCE::Shared::Ordhash->new();
for my $key (qw( a_a b_b c_c d_d e_e )) {
$table->{$key}{'pend'} += 1;
$table->{$key}{'run'} += 2;
}
print Dumper($table), "\n";
####
$VAR1 = bless( [
{
'a_a' => {
'run' => 2,
'pend' => 1
},
'b_b' => {
'pend' => 1,
'run' => 2
},
'd_d' => {
'run' => 2,
'pend' => 1
},
'c_c' => {
'pend' => 1,
'run' => 2
},
'e_e' => {
'pend' => 1,
'run' => 2
}
},
[
'a_a',
'b_b',
'c_c',
'd_d',
'e_e'
],
{},
\0,
\0,
{
'a_a' => $VAR1->[0]{'a_a'},
'b_b' => $VAR1->[0]{'b_b'},
'c_c' => $VAR1->[0]{'c_c'},
'd_d' => $VAR1->[0]{'d_d'},
'e_e' => $VAR1->[0]{'e_e'}
}
], 'MCE::Shared::Ordhash' );
####
use strict;
use warnings;
use Hash::Ordered;
use MCE::Shared::Ordhash;
use List::Util 'shuffle';
use Time::HiRes 'time';
my ($start, $total); srand 0;
sub ready {
my $time = time;
$total += $time - $start;
$start = $time;
}
# my $oh = Hash::Ordered->new();
my $oh = MCE::Shared::Ordhash->new();
print ref($oh), "\n";
my @keys1 = shuffle('aaaa'..'gggf'); # size: 109,674
my @keys2 = shuffle('gggg'..'mmmm'); # size: 109,675
my @keys3 = shuffle('nnnn'..'ttts'); # size: 109,674
my @keys4 = shuffle('tttt'..'zzzz'); # size: 109,675
$oh->set($_,$_) for ('a'..'m','_','n'..'z'); # add 26 or more keys
$oh->delete('_'); # has INDX afterwards
$start = time;
$oh->set($_,$_) for @keys1;
printf "duration (set ): %0.02f\n", time - $start;
ready();
$oh->push($_,$_) for @keys2;
printf "duration (push ): %0.02f\n", time - $start;
ready();
$oh->unshift($_,$_) for @keys3;
printf "duration (unshift): %0.02f\n", time - $start;
ready();
$oh->merge(map {$_,$_} @keys4);
printf "duration (merge ): %0.02f\n", time - $start;
# ready();
# $oh->delete($_) for @keys2;
# printf "duration (delete ): %0.02f\n", time - $start;
printf "total time : %0.02f\n", $total += time - $start;
####
Hash::Ordered
duration (set ): 0.20
duration (push ): 0.24
duration (unshift): 0.29
duration (merge ): 0.23
total time : 0.95
MCE::Shared::Ordhash
duration (set ): 0.12
duration (push ): 0.16
duration (unshift): 0.21
duration (merge ): 0.15
total time : 0.65