use strict;
use YAML::Syck;
use Test::More tests => 11;
SKIP: {
eval { require Devel::Leak }
or skip( "Devel::Leak not installed", 11 );
my $yaml = q{---
blah
};
require Symbol;
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 = qresult: !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 = qresult: !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";
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;
is( $diff, 0, "No leaks - Dump code" );
}