CXC-Data-Visitor
view release on metacpan or search on metacpan
#! perl
use v5.20;
use Test2::V0;
use CXC::Data::Visitor '-all';
use Ref::Util 'is_hashref', 'is_arrayref';
use experimental 'signatures', 'postderef';
use Data::Dump 'pp';
sub myhash {
(
a => 1,
b => [ 2, 3, 4 ],
c => {
d => [ 5, 6, 7 ],
e => 8,
},
);
}
subtest 'default' => sub {
my %hash = myhash;
my @order;
visit(
\%hash,
sub ( $kydx, $vref, @ ) {
push @order, $vref->$*;
return RESULT_CONTINUE;
},
visit => VISIT_LEAF,
);
is( \@order, [ 1 .. 8 ] ) or diag pp @order;
};
subtest 'key_sort => true' => sub {
my %hash = myhash;
my @keys_a = keys %hash;
my @keeys_c = keys $hash{c}->%*;
my @input = ( \%hash );
my @expected;
while ( @input ) {
my $element = shift @input;
if ( is_arrayref $element ) {
unshift @input, $element->@*;
}
elsif ( is_hashref $element ) {
unshift @input, values $element->%*;
}
else {
push @expected, $element;
}
}
my @order;
visit(
\%hash,
sub ( $kydx, $vref, @ ) {
push @order, $vref->$*;
return RESULT_CONTINUE;
},
visit => VISIT_LEAF,
key_sort => !!1,
);
( run in 1.590 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )