-
Notifications
You must be signed in to change notification settings - Fork 7
/
code.t
53 lines (45 loc) · 1.97 KB
/
code.t
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
#!/usr/bin/perl -w
use strict;
use Test::More tests => 12;
use Devel::SizeMe ':all';
sub zwapp;
sub swoosh($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$);
sub crunch {
}
my $whack_size = total_size(\&whack);
my $zwapp_size = total_size(\&zwapp);
my $swoosh_size = total_size(\&swoosh);
my $crunch_size = total_size(\&crunch);
cmp_ok($whack_size, '>', 0, 'CV generated at runtime has a size');
if ($] < 5.017) { # blead 186a5ba82d5844e9713475c494fcd6682968609f
cmp_ok($zwapp_size, '>', $whack_size,
'CV stubbed at compiletime is larger (CvOUTSIDE is set and followed)');
}
else { pass() }
cmp_ok(length prototype \&swoosh, '>', 0, 'prototype has a length');
cmp_ok($swoosh_size, '>', $zwapp_size + length prototype \&swoosh,
'prototypes add to the size');
cmp_ok($crunch_size, '>', $zwapp_size, 'sub bodies add to the size');
my $anon_proto = sub ($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$) {};
my $anon_size = total_size(sub {});
my $anon_proto_size = total_size($anon_proto);
cmp_ok($anon_size, '>', 0, 'anonymous subroutines have a size');
cmp_ok(length prototype $anon_proto, '>', 0, 'prototype has a length');
cmp_ok($anon_proto_size, '>', $anon_size + length prototype $anon_proto,
'prototypes add to the size');
SKIP: {
use vars '@b';
my $aelemfast_lex = total_size(sub {my @a; $a[0]});
my $aelemfast = total_size(sub {my @a; $b[0]});
# This one is sane even before Dave's lexical aelemfast changes:
cmp_ok($aelemfast_lex, '>', $anon_size,
'aelemfast for a lexical is handled correctly');
skip('alemfast was extended to lexicals after this perl was released', 1)
if $] < 5.008004;
cmp_ok($aelemfast, '>', $aelemfast_lex,
'aelemfast for a package variable is larger');
}
my $short_pvop = total_size(sub {goto GLIT});
my $long_pvop = total_size(sub {goto KREEK_KREEK_CLANK_CLANK});
cmp_ok($short_pvop, '>', $anon_size, 'OPc_PVOP can be measured');
is($long_pvop, $short_pvop + 19, 'the only size difference is the label length');