#!/usr/bin/ruby
var dd = frequire('Data::Dump')
#
## Hash cyclic reference
#
var h = Hash(foo => 0, bar => [0,1])
h{:baz} = h
assert_eq(dd.dump(h.get_value), <<'EOT'.chomp)
do {
my $a = { bar => [0, 1], baz => 'fix', foo => 0 };
$a->{baz} = $a;
$a;
}
EOT
#
## Array cyclic reference
#
var a = [1,2,3,4]
a[2] = a
assert_eq(dd.dump(a.get_value), <<'EOT'.chomp)
do {
my $a = [1, 2, 'fix', 4];
$a->[2] = $a;
$a;
}
EOT
#assert_eq(Perl.to_sidef(a.get_value), a)
#
## Triple cyclic references
#
var a2 = [1,[2,3],4]
a2[3] = a2
a2[4] = a
a2[1][2] = a2[1]
assert_eq(dd.dump(a2.get_value), <<'EOT'.chomp)
do {
my $a = [1, [2, 3, 'fix'], 4, 'fix', [1, 2, 'fix', 4]];
$a->[1][2] = $a->[1];
$a->[3] = $a;
$a->[4][2] = $a->[4];
$a;
}
EOT
#
## Mutual cyclic references
#
a[4] = h
h{:quix} = a
assert_eq(dd.dump(h.get_value), <<'EOT'.chomp)
do {
my $a = { bar => [0, 1], baz => 'fix', foo => 0, quix => [1, 2, 'fix', 4, 'fix'] };
$a->{baz} = $a;
$a->{quix}[2] = $a->{quix};
$a->{quix}[4] = $a;
$a;
}
EOT
#
## Pair cyclic reference
#
var p = Pair(1, 2)
p.second = p
assert_eq(dd.dump(p.get_value), <<'EOT'.chomp)
do {
my $a = [1, 'fix'];
$a->[1] = $a;
$a;
}
EOT
say "** Test passed!"