The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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;