The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Memory leak test.
# We create 1_000_000 events in chunks of 1000, each time
# assigning them to the same Perl scalar. We do not add
# them, though.
# After each chunk we test if memory usage has grown.
# If it has, it means there was a memory leak.

# XXX This test does NOT work with Test::More as
# XXX that will apparently allocate more and more 
# XXX memory.

use constant HAS_GTOP => eval { require GTop && GTop->VERSION >= 0.12 } || 0;
use Test;
use Event::Lib;

BEGIN {
    plan tests => (1000 * HAS_GTOP) || 1;
}

if (! HAS_GTOP) {
    skip("These tests require GTop");
    exit;
}

my $gtop = GTop->new;

sub run {}

# let perl reach a stable state of memory usage
timer_new(\&run)->add(0.000001) for 1..100;
Event::Lib::event_mainloop;

my $initial = $gtop->proc_mem($$)->vsize;
my $e;
for (1 .. 1000) {
    $e = timer_new(\&run) for 1..1000;
    ok($gtop->proc_mem($$)->vsize, $initial);
}