#!/usr/bin/perl

use strict;
use Test::More tests => 6;
use Scalar::Util qw(weaken refaddr);
BEGIN { use_ok('Devel::Gladiator') };
use Devel::Peek;

my $found;
my $foo = "blah";

my $array = Devel::Gladiator::walk_arena();
ok($array, "walk returned");
is(ref $array, "ARRAY", ".. with an array");
$found = undef;
foreach my $value (@$array) {
    next unless refaddr($value) == refaddr(\$foo);
    $found = $value;
}
is($$found, $foo, 'found foo');
@$array = ();

# make a circular reference
my $ptr;
{
    my $foo = ["missing!"];
    my $bar = \$foo;
    $foo->[1] = $bar;
    $ptr = $foo;
    weaken($ptr);
}
ok($ptr, "foo went missing");

$array = Devel::Gladiator::walk_arena();
$found = undef;
foreach my $value (@$array) {
    next unless refaddr($value) == refaddr($ptr);
    $found = $value;
}
is($found->[0], "missing!", "found missing item");
@$array = ();
