File: 03-leak.t

package info (click to toggle)
libtype-tiny-perl 2.002001-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,948 kB
  • sloc: perl: 14,610; makefile: 2; sh: 1
file content (94 lines) | stat: -rw-r--r-- 2,173 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
=pod

=encoding utf-8

=head1 PURPOSE

Check for memory leaks.

These tests are not comprehensive; chances are that there are still
memory leaks lurking somewhere in Type::Tiny. If you have any concrete
suggestions for things to test, or fixes for identified memory leaks,
please file a bug report.

L<https://rt.cpan.org/Ticket/Create.html?Queue=Type-Tiny>.

=head1 DEPENDENCIES

L<Test::LeakTrace>.

This test is skipped on Perl < 5.10.1 because I'm not interested in
jumping through hoops for ancient versions of Perl.

=head1 MISC ATTRIBUTE DECORATION

If Perl has been compiled with Misc Attribute Decoration (MAD) enabled,
then this test may fail. If you don't know what MAD is, then don't
worry: you probably don't have it enabled.

=head1 AUTHOR

Toby Inkster E<lt>tobyink@cpan.orgE<gt>.

=head1 COPYRIGHT AND LICENCE

This software is copyright (c) 2013-2014, 2017-2023 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut

use strict;
use warnings;
use lib qw( ./lib ./t/lib ../inc ./inc );

use Test::More;
use Config;

BEGIN { plan skip_all => 'Devel::Cover'  if $INC{'Devel/Cover.pm'} };
BEGIN { plan skip_all => 'Perl < 5.10.1' if $] < 5.010001 };
BEGIN { plan skip_all => 'useithreads'   if $Config{'useithreads'} };

use Test::Requires 'Test::LeakTrace';
use Test::LeakTrace;

use Types::Standard qw( ArrayRef HashRef );

eval { require Moo };

no_leaks_ok {
	my $x = Type::Tiny->new;
	undef($x);
} 'Type::Tiny->new';

no_leaks_ok {
	my $x = Type::Tiny->new->coercibles;
	undef($x);
} 'Type::Tiny->new->coercible';

no_leaks_ok {
	my $x = ArrayRef | HashRef;
	my $y = HashRef | ArrayRef;
	undef($_) for $x, $y;
} 'ArrayRef | HashRef';

no_leaks_ok {
	my $x = ArrayRef[HashRef];
	my $y = HashRef[ArrayRef];
	undef($_) for $x, $y;
} 'ArrayRef[HashRef]';

no_leaks_ok {
	my $x = Type::Tiny->new;
	$x->check(1);
	undef($x);
} 'Type::Tiny->new->check';

no_leaks_ok {
	my $x = ArrayRef->plus_coercions(HashRef, sub { [sort keys %$_] });
	my $a = $x->coerce({bar => 1, baz => 2});
	undef($_) for $x, $a;
} 'ArrayRef->plus_coercions->coerce';

done_testing;