use strict; use warnings; use Data::MessagePack; use Test::More tests => 9; my $input = [ 42, "foo", { x => [ (1) x 16 ] }, undef, 1 ]; my $packed = Data::MessagePack->pack($input); is_deeply(Data::MessagePack->unpack($packed), $input); { my $up = Data::MessagePack::Unpacker->new(); $up->execute($packed, 0); ok $up->is_finished; is_deeply $up->data, $input; } { my $up = Data::MessagePack::Unpacker->new(); is $up->execute(substr($packed, 0, 3), 0), 3; ok !$up->is_finished; $up->execute($packed, 3); ok $up->is_finished; is_deeply $up->data, $input; } { my $up = Data::MessagePack::Unpacker->new(); my $size = 8; note "packed size: ", length($packed); open my $stream, '<:bytes :scalar', \$packed; my $buff; while( read($stream, $buff, $size) ) { note "buff: ", join " ", map { unpack 'H2', $_ } split //, $buff; $up->execute($buff); } ok $up->is_finished, 'is_finished'; my $data = $up->data; note explain($data); is_deeply $data, $input; }