+sub abort_smart {
+ my $self = shift;
+
+ $extra_tests = 0;
+
+ $self->SUPER::abort(@_);
+}
+
+sub DESTROY {
+ return unless $extra_tests;
+
+ my $tb = Test::Builder->new;
+
+ $tb->is_eq(scalar(@filtered_reports), 1, 'caught one extra leak');
+
+ if (@filtered_reports) {
+ my $first = shift @filtered_reports;
+ $tb->diag("The subsequent report was correctly caught:\n" . $first->[0]);
+ $tb->is_eq($first->[1], 10_000, '10_000 bytes leaked');
+ $tb->is_eq($first->[2], 1, ' in one block');
+
+ for my $extra_report (@filtered_reports) {
+ $tb->diag(
+ "The subsequent report should NOT have been caught:\n" . $extra_report->[0]
+ );
+ }
+ } else {
+ $tb->ok(0, 'no extra leak caught, hence no bytes leaked');
+ $tb->ok(0, 'no extra leak caught, hence no block leaked');
+ }
+}
+