The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use File::Spec;
use lib File::Spec->catdir(qw(t lib));
BEGIN {
    lib->import('lib')
        if !-d 't';
}
use Sereal::TestSet qw(:all);

if (have_encoder_and_decoder(3.005003)) {
    plan tests => 6;
} else {
    plan skip_all => 'Did not find right version of encoder';
}
my $enc = Sereal::Encoder->new;
my $dec = Sereal::Decoder->new;

sub desc_special($) {
        return $_[0] == \undef() ? "undef" :
                $_[0] == \!1 ? "false" :
                $_[0] == \!0 ? "true" :
                !defined($_[0]) ? "undef" :
                length($_[0]) ? "not-special" :
                do {
                    my @warn;
                    local $SIG{__WARN__}= sub { push @warn,$_[0] };
                    my $i= int($_[0]);
                    @warn ? "not-special" : "false";
                };
}

foreach(
        [ "ref undef",     \undef(),                                            ],
        [ "ref undef var", \do { my $z = undef },                               ],
        [ "ref false",     \!1,                                                 ],
        [ "ref false var", \do { my $z = !1 },                                  ],
        [ "ref true",      \!0,                                                 ],
        [ "ref true var ", \do { my $z = !0 },                                  ],
) {
    my ($name, $var, $todo)= @$_;
    TODO: {
        todo_skip $todo, 1 if $todo;
        is( desc_special($dec->decode($enc->encode($var))), desc_special($var), $name );
    }
}