1#!perl 2 3use Test::Without::Module ("Module::Runtime"); 4use strict ("subs", "vars", "refs"); 5use warnings ("all"); 6BEGIN { $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} = "Storable"; } 7END { delete $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} } # for VMS 8 9use Scalar::Util qw(refaddr); 10use Test::More; 11 12BEGIN 13{ 14 $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} and eval "use $ENV{CLONE_CHOOSE_PREFERRED_BACKEND}; 1;"; 15 $@ and plan skip_all => "No $ENV{CLONE_CHOOSE_PREFERRED_BACKEND} found."; 16} 17 18use Clone::Choose; 19 20my $array = [1, ["two", [3, ["four"],],],]; 21my $cloned_array = clone $array; 22 23ok(refaddr $array != refaddr $cloned_array, "Clone depth 0"); 24ok(refaddr($array->[1]) != refaddr($cloned_array->[1]), "Clone depth 1"); 25ok(refaddr($array->[1][1]) != refaddr($cloned_array->[1][1]), "Clone depth 2"); 26ok(refaddr($array->[1][1][1]) != refaddr($cloned_array->[1][1][1]), "Clone depth 3"); 27 28ok($array->[0] == $cloned_array->[0], "Array value depth 0"); 29ok($array->[1][0] eq $cloned_array->[1][0], "Array value depth 1"); 30ok($array->[1][1][0] == $cloned_array->[1][1][0], "Array value depth 2"); 31ok($array->[1][1][1][0] eq $cloned_array->[1][1][1][0], "Array value depth 3"); 32 33ok($cloned_array->[0] == 1, "Array value sanity depth 0"); 34ok($cloned_array->[1][0] eq "two", "Array value sanity depth 1"); 35ok($cloned_array->[1][1][0] == 3, "Array value sanity depth 2"); 36ok($cloned_array->[1][1][1][0] eq "four", "Array value sanity depth 3"); 37 38my $empty_array = []; 39my $cloned_empty_array = clone $empty_array; 40 41ok(refaddr $empty_array != refaddr $cloned_empty_array, "Empty array clone"); 42 43done_testing; 44 45 46