The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use Memcached::Client::Serializer::Storable;
use Storable qw{nfreeze};
use Test::More tests => 11;

my $serializer;

isa_ok ($serializer = Memcached::Client::Serializer::Storable->new,
        'Memcached::Client::Serializer::Storable',
        'Create a new instance of the ::Storable class');

is ($serializer->serialize,
    undef,
    '->serialize should return undef since we gave it nothing to serialize');

is ($serializer->deserialize,
    undef,
    '->deserialize should return undef since we gave it nothing to deserialize');

is_deeply ([$serializer->serialize ('foo')],
           ['foo', 0],
           '->serialize should return the simple tuple since it is so short');

is_deeply ([$serializer->deserialize ('foo', 0)],
           ['foo'],
           '->deserialize should return the same structure since it was not serialized');

is_deeply ([$serializer->serialize ('17times3939')],
           ['17times3939', 0],
           '->serialize should return the simple tuple since it is so short');

is_deeply ([$serializer->deserialize ('17times3939', 0)],
           ['17times3939'],
           '->deserialize should return the same tuple since it was not serialized');

my $longstring = 'a' x 20000;

is_deeply ([$serializer->serialize ($longstring)],
           [$longstring, 0],
           '->serialize a very long repetitive string');

is_deeply ([$serializer->deserialize ($longstring, 0)],
           [$longstring],
           '->deserialize our very long repetitive string, compare');

my $longref = {longstring => $longstring};

my $longstorable = nfreeze $longref;

is_deeply ([$serializer->serialize ($longref)],
           [$longstorable, 1],
           '->serialize a very long repetitive string inside a ref');

is_deeply ([$serializer->deserialize ($longstorable, 1)],
           [$longref],
           '->deserialize a very long repetitive string inside a ref, compare');