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
|
use warnings;
use strict;
use Test::More tests => 76;
use XS::APItest qw(pad_scalar);
is pad_scalar(1, "foo"), "NOT_IN_PAD";
is pad_scalar(2, "foo"), "NOT_IN_PAD";
is pad_scalar(3, "foo"), "NOT_IN_PAD";
is pad_scalar(4, "foo"), "NOT_IN_PAD";
is pad_scalar(1, "bar"), "NOT_IN_PAD";
is pad_scalar(2, "bar"), "NOT_IN_PAD";
is pad_scalar(3, "bar"), "NOT_IN_PAD";
our $foo = "wibble";
my $bar = "wobble";
is pad_scalar(1, "foo"), "NOT_MY";
is pad_scalar(2, "foo"), "NOT_MY";
is pad_scalar(3, "foo"), "NOT_MY";
is pad_scalar(4, "foo"), "NOT_MY";
is pad_scalar(1, "bar"), "wobble";
is pad_scalar(2, "bar"), "wobble";
is pad_scalar(3, "bar"), "wobble";
sub aa($);
sub aa($) {
my $xyz;
ok \pad_scalar(1, "xyz") == \$xyz;
ok \pad_scalar(2, "xyz") == \$xyz;
ok \pad_scalar(3, "xyz") == \$xyz;
aa(0) if $_[0];
ok \pad_scalar(1, "xyz") == \$xyz;
ok \pad_scalar(2, "xyz") == \$xyz;
ok \pad_scalar(3, "xyz") == \$xyz;
is pad_scalar(1, "bar"), "wobble";
is pad_scalar(2, "bar"), "wobble";
is pad_scalar(3, "bar"), "wobble";
}
aa(1);
sub bb() {
my $counter = 0;
my $foo = \$counter;
return sub {
ok pad_scalar(1, "foo") == \pad_scalar(1, "counter");
ok pad_scalar(2, "foo") == \pad_scalar(1, "counter");
ok pad_scalar(3, "foo") == \pad_scalar(1, "counter");
ok pad_scalar(4, "foo") == \pad_scalar(1, "counter");
if(pad_scalar(1, "counter") % 3 == 0) {
return pad_scalar(1, "counter")++;
} elsif(pad_scalar(1, "counter") % 3 == 0) {
return pad_scalar(2, "counter")++;
} else {
return pad_scalar(3, "counter")++;
}
};
}
my $a = bb();
my $b = bb();
is $a->(), 0;
is $a->(), 1;
is $a->(), 2;
is $a->(), 3;
is $b->(), 0;
is $b->(), 1;
is $a->(), 4;
is $b->(), 2;
is pad_scalar(1, "foo"), "NOT_MY";
is pad_scalar(2, "foo"), "NOT_MY";
is pad_scalar(3, "foo"), "NOT_MY";
is pad_scalar(4, "foo"), "NOT_MY";
1;
|