Clone
view release on metacpan or search on metacpan
t/12-memleak.t view on Meta::CPAN
my $before = get_rss_kb();
SKIP: {
skip "Cannot measure RSS on this platform", 1 unless defined $before;
for (1..100_000) {
my $tmp = $data->{no_such_key};
clone($tmp);
}
my $after = get_rss_kb();
my $delta = $after - $before;
ok($delta < 2000, "clone via intermediate variable does not leak (delta: ${delta} KB)")
or diag("Memory grew by $delta KB over 100K iterations");
}
}
# Test 5: direct hash miss should not leak (the actual bug from GH #42)
{
my $data = {};
my $before = get_rss_kb();
SKIP: {
skip "Cannot measure RSS on this platform", 1 unless defined $before;
for (1..100_000) {
Clone::clone($data->{no_such_key});
}
my $after = get_rss_kb();
my $delta = $after - $before;
ok($delta < 2000, "clone of hash miss does not leak (delta: ${delta} KB)")
or diag("Memory grew by $delta KB over 100K iterations â GH #42 regression");
}
}
# Test 6: populated hash, direct miss should not leak
{
my %hash = (a => 1, b => 2, c => 3);
my $before = get_rss_kb();
SKIP: {
skip "Cannot measure RSS on this platform", 1 unless defined $before;
for (1..100_000) {
Clone::clone($hash{nonexistent});
}
my $after = get_rss_kb();
my $delta = $after - $before;
ok($delta < 2000, "clone of hash miss on populated hash does not leak (delta: ${delta} KB)")
or diag("Memory grew by $delta KB over 100K iterations");
}
}
# Test 7: clone of existing hash key should work fine and not leak
{
my %hash = (key => "value");
my $result = clone($hash{key});
is($result, "value", "clone of existing hash key returns correct value");
}
( run in 1.369 second using v1.01-cache-2.11-cpan-71847e10f99 )