1*5759b3d2Safresh1#!/usr/bin/perl -w 2*5759b3d2Safresh1 3*5759b3d2Safresh1# Test is_deeply and friends with circular data structures [rt.cpan.org 7289] 4*5759b3d2Safresh1 5*5759b3d2Safresh1BEGIN { 6*5759b3d2Safresh1 if( $ENV{PERL_CORE} ) { 7*5759b3d2Safresh1 chdir 't'; 8*5759b3d2Safresh1 @INC = ('../lib', 'lib'); 9*5759b3d2Safresh1 } 10*5759b3d2Safresh1 else { 11*5759b3d2Safresh1 unshift @INC, 't/lib'; 12*5759b3d2Safresh1 } 13*5759b3d2Safresh1} 14*5759b3d2Safresh1 15*5759b3d2Safresh1use strict; 16*5759b3d2Safresh1use Test::More tests => 11; 17*5759b3d2Safresh1 18*5759b3d2Safresh1my $a1 = [ 1, 2, 3 ]; 19*5759b3d2Safresh1push @$a1, $a1; 20*5759b3d2Safresh1my $a2 = [ 1, 2, 3 ]; 21*5759b3d2Safresh1push @$a2, $a2; 22*5759b3d2Safresh1 23*5759b3d2Safresh1is_deeply $a1, $a2; 24*5759b3d2Safresh1ok( eq_array ($a1, $a2) ); 25*5759b3d2Safresh1ok( eq_set ($a1, $a2) ); 26*5759b3d2Safresh1 27*5759b3d2Safresh1my $h1 = { 1=>1, 2=>2, 3=>3 }; 28*5759b3d2Safresh1$h1->{4} = $h1; 29*5759b3d2Safresh1my $h2 = { 1=>1, 2=>2, 3=>3 }; 30*5759b3d2Safresh1$h2->{4} = $h2; 31*5759b3d2Safresh1 32*5759b3d2Safresh1is_deeply $h1, $h2; 33*5759b3d2Safresh1ok( eq_hash ($h1, $h2) ); 34*5759b3d2Safresh1 35*5759b3d2Safresh1my ($r, $s); 36*5759b3d2Safresh1 37*5759b3d2Safresh1$r = \$r; 38*5759b3d2Safresh1$s = \$s; 39*5759b3d2Safresh1 40*5759b3d2Safresh1ok( eq_array ([$s], [$r]) ); 41*5759b3d2Safresh1 42*5759b3d2Safresh1 43*5759b3d2Safresh1{ 44*5759b3d2Safresh1 # Classic set of circular scalar refs. 45*5759b3d2Safresh1 my($a,$b,$c); 46*5759b3d2Safresh1 $a = \$b; 47*5759b3d2Safresh1 $b = \$c; 48*5759b3d2Safresh1 $c = \$a; 49*5759b3d2Safresh1 50*5759b3d2Safresh1 my($d,$e,$f); 51*5759b3d2Safresh1 $d = \$e; 52*5759b3d2Safresh1 $e = \$f; 53*5759b3d2Safresh1 $f = \$d; 54*5759b3d2Safresh1 55*5759b3d2Safresh1 is_deeply( $a, $a ); 56*5759b3d2Safresh1 is_deeply( $a, $d ); 57*5759b3d2Safresh1} 58*5759b3d2Safresh1 59*5759b3d2Safresh1 60*5759b3d2Safresh1{ 61*5759b3d2Safresh1 # rt.cpan.org 11623 62*5759b3d2Safresh1 # Make sure the circular ref checks don't get confused by a reference 63*5759b3d2Safresh1 # which is simply repeating. 64*5759b3d2Safresh1 my $a = {}; 65*5759b3d2Safresh1 my $b = {}; 66*5759b3d2Safresh1 my $c = {}; 67*5759b3d2Safresh1 68*5759b3d2Safresh1 is_deeply( [$a, $a], [$b, $c] ); 69*5759b3d2Safresh1 is_deeply( { foo => $a, bar => $a }, { foo => $b, bar => $c } ); 70*5759b3d2Safresh1 is_deeply( [\$a, \$a], [\$b, \$c] ); 71*5759b3d2Safresh1} 72