Async-Blackboard

 view release on metacpan or  search on metacpan

t/03_memory_leaks.t  view on Meta::CPAN

        $blackboard->put(foo => ++$i);

        $blackboard->remove("foo");

        ! $blackboard->has("foo") or die "foo should have been removed";

        $blackboard->put(foo => ++$i);
    }

    {
        my $i = 0;

        my $blackboard = Async::Blackboard->build(
            watchers => [
                foo => sub { shift eq $i or die "foo" },
            ],
        )->clone;

        # Make sure that we only dispatch one event.
        $blackboard->replace(foo => ++$i) for 1 .. 2;

        $blackboard->get("foo") eq 2
            or die "get results in changed value after replace";
    }

    {
        my $blackboard = Async::Blackboard->new;

        $blackboard->watch(foo => sub {
                my ($blackboard) = @_;

                $blackboard->put(bar => "Cause Failure");
            }
        );

        $blackboard->watch([qw( foo bar )] => sub { "Saw event for foo bar" });

        $blackboard->put(foo => $blackboard);

        $blackboard->clear;
        $blackboard->hangup;
    }

    {
        my $blackboard = Async::Blackboard->new();

        $blackboard->watch(foo => sub { $blackboard->hangup });
        $blackboard->watch(foo => sub { die "Expected hangup" });

        $blackboard->put(foo => 1);

        $blackboard->hungup or die "Blackboard was hung up";

        $blackboard->hangup;
    }

    {
        my $blackboard = Async::Blackboard->new();

        $blackboard->put(blackboard => $blackboard);
        $blackboard->weaken("blackboard");
    }
}

=item Watcher in loop

Run most of the tests from t/01_watcher.t in a loop (not using the actual test
harness, that proved too problematic) some 20 times and verify that the
resident footprint and number of tracked objects did not change.

=cut

subtest "Watcher in loop" => sub {
    no warnings "redefine";

    run_extensive_tests for 1 .. 10;

    # This will shut off some of the random output from Devel::Leak;
    close STDERR;

    my $handle;

    BSD::Resource::getrusage->maxrss;

    my $start_count = Devel::Leak::NoteSV($handle);
    my $resident = BSD::Resource::getrusage->maxrss;

    run_extensive_tests for 1 .. 20;

    my $end_count = Devel::Leak::CheckSV($handle);

    is $start_count, $end_count,
    "Object counts are the same";

    is BSD::Resource::getrusage->maxrss, $resident,
    "We don't seem to leak";
};

=back

=cut

done_testing;



( run in 2.358 seconds using v1.01-cache-2.11-cpan-5c0b1e786e0 )