#!perl
use
lib File::Spec->catdir(
qw(t lib)
);
BEGIN {
lib->
import
(
'lib'
)
if
!-d
't'
;
}
run_tests(
"plain"
);
run_tests(
"no_shared_hk"
, {
no_shared_hashkeys
=> 1});
run_tests(
"dedupe_strings"
, {
dedupe_strings
=> 1});
run_tests(
"aliased_dedupe_strings"
, {
aliased_dedupe_strings
=> 1});
done_testing();
sub
run_tests {
my
(
$extra_name
,
$opt_hash
) =
@_
;
setup_tests(4);
foreach
my
$bt
(
@BasicTests
) {
my
(
undef
,
$expect
,
$name
,
@alternate
) =
@$bt
;
$name
=
"unnamed"
if
not
defined
$name
;
for
my
$x
(
$expect
,
@alternate
) {
$x
=
$x
->(
$opt_hash
)
if
ref
(
$x
) eq
'CODE'
;
$x
= Header() .
$x
;
}
my
$enc
= Sereal::Encoder->new(
$opt_hash
?
$opt_hash
: ());
my
$out
;
eval
{
$out
=
$enc
->encode(
$bt
->[0]);
1;
} or
die
"Failed to encode: \n$@\n"
. Data::Dumper::Dumper(
$bt
->[0]);
ok(
defined
$out
,
"($extra_name) defined: $name"
)
or
next
;
my
$alt
=
""
;
if
(
$out
ne
$expect
) {
foreach
my
$accept
(
@alternate
) {
if
(
$out
eq
$accept
) {
$expect
=
$accept
;
$alt
=
" - alternate"
;
last
;
}
}
}
is(Data::Dumper::qquote(
$out
), Data::Dumper::qquote(
$expect
),
"($extra_name) correct: $name"
.
$alt
)
or
do
{
if
(
$ENV
{DEBUG_SEREAL}) {
print
STDERR
"\nEXPECTED:\n"
;
hobodecode(
$expect
);
print
STDERR
"\nGOT:\n"
;
hobodecode(
$out
);
print
STDERR
"\n"
;
}
};
}
}