use strict; use warnings; use t::std; { my $a1 = gen_layers(2); my $a2 = gen_layers(2); check_test( sub { cmp_deeply($a1, $a2); }, { actual_ok => 1, diag => "", }, "2 layers" ); push(@$a1, "break"); check_test( sub { cmp_deeply($a1, $a2); }, { actual_ok => 0, diag => < 1, diag => "", }, "2 layers fixed" ); } { my $a1 = gen_layers(2); my $a2 = gen_layers(3); check_test( sub { cmp_deeply($a1, $a2); }, { actual_ok => 1, diag => "", }, "2 and 3 layers" ); push(@$a1, "break"); check_test( sub { cmp_deeply($a1, $a2); }, { actual_ok => 0, diag => < 0, diag => <[2][2] got : array with 4 element(s) expect : array with 3 element(s) EOM }, "2 and 3 layers not fixed" ); } { my $a1 = gen_interleave(); my $a2 = gen_interleave(); check_test( sub { cmp_deeply($a1, $a2); }, { actual_ok => 1, diag => "", }, "interleave" ); } sub gen_layers { my $num = shift; my $first = ['text', gen_circle()]; $num--; my $last = $first; while ($num--) { my $next = ['text', gen_circle()]; push(@$last, $next); $last = $next; } push(@$last, $first); return $first } sub gen_circle { my $a = ['circle']; push(@$a, $a); return $a } sub gen_interleave { my $a = []; my $b = []; push(@$a, $b, $a); push(@$b, $a, $b); return $a; }