AnyEvent-Serialize
view release on metacpan or search on metacpan
lib/AnyEvent/Serialize.pm view on Meta::CPAN
unless $bs > 0;
$block_size = $bs;
splice @arg, $_, 2;
last;
}
return $class->export_to_level(1, $class, @arg);
}
sub serialize($&) {
require Data::StreamSerializer;
no warnings 'redefine';
no strict 'refs';
*{ __PACKAGE__ . '::serialize' } = sub ($&) {
my ($obj, $cb) = @_;
my $sr = new Data::StreamSerializer $obj;
$sr->block_size($block_size);
my $str = $sr->next;
lib/AnyEvent/Serialize.pm view on Meta::CPAN
if ($sr->is_eof) {
stop_aggressive_idle $pid;
$cb->($str, $sr->recursion_detected);
}
};
};
goto &serialize;
}
sub deserialize($&) {
require Data::StreamDeserializer;
no warnings 'redefine';
no strict 'refs';
*{ __PACKAGE__ . '::deserialize' } = sub ($&) {
my ($data, $cb) = @_;
my $dsr = new Data::StreamDeserializer
data => $data, block_size => $block_size;
if ($dsr->next_object) {
t/serialize.t view on Meta::CPAN
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Useqq = 1;
local $Data::Dumper::Deepcopy = 1;
use Test::More tests => 54;
BEGIN {
use_ok 'AnyEvent';
use_ok('AnyEvent::Serialize', ':all', 'block_size' => 10);
};
sub rand_array($);
sub compare_object($$);
sub rand_hash($);
my @a;
for (0 .. 9) {
push @a, (50 < rand 100) ? rand_hash 6 : rand_array 6;
# push @a, (50 < rand 100) ? [1,2] : {1,2};
}
$_ = { str => Dumper($_), orig => $_ } for @a;
{
t/serialize.t view on Meta::CPAN
}
ok grep({$res[$_]{time} < $res[$_+1]{time} } 0 .. $#res - 1) > 0,
"Random finish time";
ok grep({$res[$_]{order} < $res[$_+1]{order} } 0 .. $#res - 1) > 0,
"Random order";
}
sub rand_string()
{
my $rstr = '';
my @letters = (
qw(й Ñ Ñ Ðº е н г Ñ Ñ Ð· Ñ
Ñ Ñ Ñ Ð² а п Ñ Ð¾ л д ж Ñ Ñ Ñ Ñ Ð¼ и Ñ Ñ Ð± Ñ),
map { chr $_ } 0x20 .. 0x7e
);
$rstr .= $letters[rand @letters] for 0 .. -1 + int rand 20;
return $rstr;
}
sub rand_hash($)
{
my ($deep) = @_;
my %h;
return rand_string if $deep <= 0;
for ( 0 .. $deep ) {
my $key = rand_string;
if (3 > rand 10) {
$h{$key} = rand_string;
} elsif (5 > rand 10) {
$h{$key} = rand_hash($deep - 1);
} else {
$h{$key} = rand_array($deep - 1);
}
}
return \%h;
}
sub rand_array($)
{
my @array;
my ($count) = @_;
return rand_string if $count <= 0;
for (0 .. $count) {
if (3 > rand 10) {
push @array, rand_string;
} elsif (5 > rand 10) {
push @array, rand_hash($count - 1);
} else {
push @array, rand_array($count - 1);
}
}
return \@array;
}
sub compare_object($$)
{
my ($o1, $o2) = @_;
return 0 unless ref($o1) eq ref $o2;
return $o1 eq $o2 unless ref $o1; # SCALAR
return compare_object $$o1, $$o2 if 'SCALAR' eq ref $o1; # SCALARREF
return compare_object $$o1, $$o2 if 'REF' eq ref $o1; # REF
if ('ARRAY' eq ref $o1) {
return 0 unless @$o1 == @$o2;
for (0 .. $#$o1) {
( run in 0.839 second using v1.01-cache-2.11-cpan-65fba6d93b7 )