circular_data.t   [plain text]

```#!/usr/bin/perl -w

# Test is_deeply and friends with circular data structures [rt.cpan.org 7289]

BEGIN {
if( \$ENV{PERL_CORE} ) {
chdir 't';
@INC = ('../lib', 'lib');
}
else {
unshift @INC, 't/lib';
}
}

use strict;
use Test::More tests => 11;

my \$a1 = [ 1, 2, 3 ];
push @\$a1, \$a1;
my \$a2 = [ 1, 2, 3 ];
push @\$a2, \$a2;

is_deeply \$a1, \$a2;
ok( eq_array (\$a1, \$a2) );
ok( eq_set   (\$a1, \$a2) );

my \$h1 = { 1=>1, 2=>2, 3=>3 };
\$h1->{4} = \$h1;
my \$h2 = { 1=>1, 2=>2, 3=>3 };
\$h2->{4} = \$h2;

is_deeply \$h1, \$h2;
ok( eq_hash  (\$h1, \$h2) );

my (\$r, \$s);

\$r = \\$r;
\$s = \\$s;

ok( eq_array ([\$s], [\$r]) );

{
# Classic set of circular scalar refs.
my(\$a,\$b,\$c);
\$a = \\$b;
\$b = \\$c;
\$c = \\$a;

my(\$d,\$e,\$f);
\$d = \\$e;
\$e = \\$f;
\$f = \\$d;

is_deeply( \$a, \$a );
is_deeply( \$a, \$d );
}

{
# rt.cpan.org 11623
# Make sure the circular ref checks don't get confused by a reference
# which is simply repeating.
my \$a = {};
my \$b = {};
my \$c = {};

is_deeply( [\$a, \$a], [\$b, \$c] );
is_deeply( { foo => \$a, bar => \$a }, { foo => \$b, bar => \$c } );
is_deeply( [\\$a, \\$a], [\\$b, \\$c] );
}
```