#!/usr/bin/perl -w
use strict;
use warnings qw(FATAL all);
use lib 'lib';
use Test::More tests => 51;
use Data::Alias qw(alias deref);
sub refs { [map "".\$_, @_] }
sub srefs { [sort map "".\$_, @_] }
our ($x, $y);
our ($a, $b, $c, $d, $e) = (1 .. 5);
our @x;
is alias(($x, @x, $y) = ($a, $b, $c, $d)), 4;
is_deeply refs(@x), refs($b, $c, $d);
is_deeply refs($x, $y), refs($a, undef);
is_deeply refs(alias +($y, @x, $x) = ($b, $c, $d)), refs($b, $c, $d, undef);
is_deeply refs(@x), refs($c, $d);
is_deeply refs($y, $x), refs($b, undef);
is_deeply refs(alias +($x, @x, $y) = ()), refs(undef, undef);
is @x, 0;
is_deeply refs($x, $y), refs(undef, undef);
is alias(($x, @x, $y) = ()), 0;
is alias((@x) = (undef, $a, undef, $b, undef)), 5;
is_deeply refs(deref \@x), refs(undef, $a, undef, $b, undef);
our %x;
is alias(($x, %x, $y) = ($a, $b, $c, $d, $e)), 5;
is keys(%x), 2;
is_deeply refs(@x{$b, $d}), refs($c, $e);
is_deeply refs($x, $y), refs($a, undef);
is_deeply refs(alias +($y, %x, $x) = ($b, $c, $d)), refs($b, $c, $d, undef);
is keys(%x), 1;
is_deeply refs($x{$c}, $y, $x), refs($d, $b, undef);
is_deeply refs(alias +($x, %x, $y) = ()), refs(undef, undef);
is keys(%x), 0;
is_deeply refs($x, $y), refs(undef, undef);
is alias(($x, %x, $y) = ()), 0;
is alias((%x) = ($a, $b, $c, undef, $d, $e)), 6;
is keys(%x), 2;
is_deeply refs($x{$a}, $x{$d}), refs($b, $e);
is alias(($x, %x, $y) = ($a, $a, $b, $b, undef, $a, undef, $b, $c)), 9;
is keys(%x), 1;
is_deeply refs($x{$b}, $x, $y), refs($c, $a, undef);
is_deeply refs(alias +($x, %x, $y) = ($a, $a, $b, $b, undef, $a, undef, $b, $c)),
refs($a, $a, undef, $b, $c, undef);
eval { alias +(%x) = ($a, $b, $c) };
like $@, qr/^Odd number of elements /;
{
no warnings 'misc';
is alias(($y, %x, $x) = ($e, $a, $b, $c, $d, $a)), 6;
is keys(%x), 1;
is_deeply refs($x{$c}, $y, $x), refs($d, $e, undef);
is_deeply refs(alias +($y, %x, $x) = ($e, $a, $b, $c, $d, $a)),
refs($e, $c, $d, $a, undef);
}
SKIP: {
no warnings 'deprecated';
skip "pseudo-hashes not supported anymore", 16 unless eval { [{1,1},1]->{1} };
our $r = [{$a=>1,$b=>2,$c=>3,$d=>4}];
is alias(($x, %$r, $y) = ($a, $b, $c, $d, $e)), 5;
is_deeply refs($x, $y, deref $r), refs($a, undef, $$r[0], undef, $c, undef, $e);
is_deeply refs(alias +($y, %$r, $x) = ($b, $c, $d)), refs($b, $c, $d, undef);
is_deeply refs($y, $x, deref $r), refs($b, undef, $$r[0], undef, undef, $d);
is_deeply refs(alias +($x, %$r, $y) = ()), refs(undef, undef);
is_deeply refs($x, $y, deref $r), refs(undef, undef, $$r[0]);
is alias(($x, %$r, $y) = ()), 0;
is alias((%$r) = ($a, $b, $c, undef, $d, $e)), 6;
is_deeply refs(deref $r), refs($$r[0], $b, undef, undef, $e);
is alias(($x, %$r, $y) = ($a, $a, $b, $b, undef, $a, undef, $b, $c)), 9;
is_deeply refs($x, $y, deref $r), refs($a, undef, $$r[0], undef, $c);
is_deeply refs(alias +($x, %$r, $y) = ($a, $a, $b, $b, undef, $a, undef, $b, $c)),
refs($a, $a, undef, $b, $c, undef);
eval { alias +(%$r) = ($a, $b, $c) };
like $@, qr/^Odd number of elements /;
{
no warnings 'misc';
is alias(($y, %$r, $x) = ($e, $a, $b, $c, $d, $a)), 6;
is_deeply refs($y, $x, deref $r), refs($e, undef, $$r[0], undef, undef, $d);
is_deeply refs(alias +($y, %$r, $x) = ($e, $a, $b, $c, $d, $a)),
refs($e, $c, $d, $a, undef);
}
}
# vim: ft=perl