#!/sw/bin/perl -w
SKIP: {
or skip(
"Devel::Leak not installed or perl too old"
, 11 );
my
$yaml
=
q{---
blah
}
;
my
$handle
= Symbol::gensym();
my
$diff
;
my
$before
= Devel::Leak::NoteSV(
$handle
);
foreach
( 1 .. 100 ) {
Load(
$yaml
);
}
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
$before
= Devel::Leak::NoteSV(
$handle
);
foreach
( 1 .. 100 ) {
Load(
$yaml
);
}
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
is(
$diff
, 0,
"No leaks - array"
);
$yaml
=
q{---
result: test
}
;
$before
= Devel::Leak::NoteSV(
$handle
);
foreach
( 1 .. 100 ) {
Load(
$yaml
);
}
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
is(
$diff
, 0,
"No leaks - hash"
);
$YAML::Syck::UseCode
= 1;
$yaml
=
q#---
result: !perl/code: '{ 42 + $_[0] }'
#
;
Load(
$yaml
);
$before
= Devel::Leak::NoteSV(
$handle
);
foreach
( 1 .. 100 ) {
Load(
$yaml
);
}
foreach
( 1 .. 100 ) {
() = Load(
$yaml
);
}
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
is(
$diff
, 0,
"No leaks - code"
);
$yaml
=
q{---
a: b
c:
- d
- e
!
}
;
ok( !
eval
{ Load(
$yaml
) },
"Load failed (expected)"
);
$before
= Devel::Leak::NoteSV(
$handle
);
eval
{ Load(
$yaml
) }
for
( 1 .. 10 );
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
is(
$diff
, 0,
"No leaks - Load failure"
);
$yaml
=
q#---
result: !perl/code: '{ 42 + + 54ih a; $" }'
#
;
{
local
$SIG
{__WARN__} =
sub
{ };
ok(
!
eval
{ Load(
$yaml
) },
"Load failed on code syntax error (expected)"
);
$before
= Devel::Leak::NoteSV(
$handle
);
eval
{ Load(
$yaml
) }
for
( 1 .. 10 );
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
local
$TODO
=
"It looks like evals leak, but we're better than Storable"
if
$diff
;
is(
$diff
, 0,
"No leaks - Load failure (code)"
);
}
my
$todump
= {
a
=> [ {
c
=> {
nums
=> [
'1'
,
'2'
,
'3'
,
'4'
,
'5'
] },
b
=>
'foo'
} ],
d
=>
'e'
};
ok(
eval
{ Dump(
$todump
) },
"Dump succeeded"
);
$before
= Devel::Leak::NoteSV(
$handle
);
foreach
( 1 .. 100 ) {
Dump(
$todump
);
}
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
is(
$diff
, 0,
"No leaks - Dump"
);
$todump
=
sub
{ 42 };
ok(
eval
{ Dump(
$todump
) },
"Dump succeeded"
);
foreach
( 1 .. 100 ) {
Dump(
$todump
);
}
$before
= Devel::Leak::NoteSV(
$handle
);
foreach
( 1 .. 100 ) {
Dump(
$todump
);
}
$diff
= Devel::Leak::NoteSV(
$handle
) -
$before
;
local
$TODO
=
"It looks like evals leak, but we're better than Storable"
if
$diff
;
is(
$diff
, 0,
"No leaks - Dump code"
);
}