1use warnings;
2use strict;
3
4use Test::More tests => 76;
5
6use XS::APItest qw(pad_scalar);
7
8is pad_scalar(1, "foo"), "NOT_IN_PAD";
9is pad_scalar(2, "foo"), "NOT_IN_PAD";
10is pad_scalar(3, "foo"), "NOT_IN_PAD";
11is pad_scalar(4, "foo"), "NOT_IN_PAD";
12is pad_scalar(1, "bar"), "NOT_IN_PAD";
13is pad_scalar(2, "bar"), "NOT_IN_PAD";
14is pad_scalar(3, "bar"), "NOT_IN_PAD";
15
16our $foo = "wibble";
17my $bar = "wobble";
18is pad_scalar(1, "foo"), "NOT_MY";
19is pad_scalar(2, "foo"), "NOT_MY";
20is pad_scalar(3, "foo"), "NOT_MY";
21is pad_scalar(4, "foo"), "NOT_MY";
22is pad_scalar(1, "bar"), "wobble";
23is pad_scalar(2, "bar"), "wobble";
24is pad_scalar(3, "bar"), "wobble";
25
26sub aa($);
27sub aa($) {
28    my $xyz;
29    ok \pad_scalar(1, "xyz") == \$xyz;
30    ok \pad_scalar(2, "xyz") == \$xyz;
31    ok \pad_scalar(3, "xyz") == \$xyz;
32    aa(0) if $_[0];
33    ok \pad_scalar(1, "xyz") == \$xyz;
34    ok \pad_scalar(2, "xyz") == \$xyz;
35    ok \pad_scalar(3, "xyz") == \$xyz;
36    is pad_scalar(1, "bar"), "wobble";
37    is pad_scalar(2, "bar"), "wobble";
38    is pad_scalar(3, "bar"), "wobble";
39}
40aa(1);
41
42sub bb() {
43    my $counter = 0;
44    my $foo = \$counter;
45    return sub {
46	ok pad_scalar(1, "foo") == \pad_scalar(1, "counter");
47	ok pad_scalar(2, "foo") == \pad_scalar(1, "counter");
48	ok pad_scalar(3, "foo") == \pad_scalar(1, "counter");
49	ok pad_scalar(4, "foo") == \pad_scalar(1, "counter");
50	if(pad_scalar(1, "counter") % 3 == 0) {
51	    return pad_scalar(1, "counter")++;
52	} elsif(pad_scalar(1, "counter") % 3 == 0) {
53	    return pad_scalar(2, "counter")++;
54	} else {
55	    return pad_scalar(3, "counter")++;
56	}
57    };
58}
59my $a = bb();
60my $b = bb();
61is $a->(), 0;
62is $a->(), 1;
63is $a->(), 2;
64is $a->(), 3;
65is $b->(), 0;
66is $b->(), 1;
67is $a->(), 4;
68is $b->(), 2;
69
70is pad_scalar(1, "foo"), "NOT_MY";
71is pad_scalar(2, "foo"), "NOT_MY";
72is pad_scalar(3, "foo"), "NOT_MY";
73is pad_scalar(4, "foo"), "NOT_MY";
74
751;
76