#!/usr/bin/env perl6 use Test; plan 54; ################################################# # Nested array my @a = [1, [[2, 3, 4], 5, [6, 7]]]; is-deeply @a[0], 1; is-deeply @a[1], [[2, 3, 4], 5, [6, 7]]; is-deeply @a[1; 0], [2, 3, 4]; is-deeply @a[1; 0; 0], 2; is-deeply @a[1; 0; 1], 3; is-deeply @a[1; 0; 2], 4; is-deeply @a[1; 1], 5; is-deeply @a[1; 2], [6, 7]; is-deeply @a[1; 2; 0], 6; is-deeply @a[1; 2; 1], 7; is-deeply @a[1,; 0; 2], (4,); is-deeply @a[1; 0,; 2], (4,); is-deeply @a[1; 0; 2,], (4,); is-deeply @a[1; 0; 0..2], (2, 3, 4); is-deeply @a[1; 0; 0,2], (2, 4); is-deeply @a[1; 0..2; 0], (2, 5, 6); is-deeply @a[1; 0,2; 1], (3, 7); is-deeply @a[1; 0,2; 0,1], (2, 3, 6, 7); is-deeply @a[1; 0,2; 0..1], (2, 3, 6, 7); is-deeply @a[0..1; 0], (1, [2, 3, 4]); is-deeply @a[1; 0; *], (2, 3, 4); is-deeply @a[1; *; 0], (2, 5, 6); is-deeply @a[*; 0; 0], (1, 2); is-deeply @a[1; *; *], (2, 3, 4, 5, 6, 7); is-deeply @a[*; *; 0], (1, 2, 5, 6); is-deeply @a[*; *; *], (1, 2, 3, 4, 5, 6, 7); is-deeply @a[*; *; *; *], (1, 2, 3, 4, 5, 6, 7); is-deeply @a[1; 0,2; *], (2, 3, 4, 6, 7); cmp-ok @a[1; 0..2; 0..1], '~~', (2, 3, 5, Failure, 6, 7); @a[1; 2; 0] := 6.1; is-deeply @a, [1, [[2, 3, 4], 5, [6.1, 7]]]; ################################################# # Nested Pair diag "----------- Pair"; { my $p = a => b => c => 42; is-deeply $p{'a'}, (b => c => 42); is-deeply $p{'a';'b'}, (c => 42); is-deeply $p{'a';'b';'c'}, 42; is-deeply $p{'a';'b';*}, (42,); } ################################################# # Nested hash for Hash, Hash[Mu,Any] -> ::T { diag "----------- {T.^name}"; my %a := T.new: |( a => 1, b => { a => {a => 2, b => 3, c => 4}, b => { a => 6, b => 7} } ); is-deeply %a{'a'}, 1; is-deeply %a{'b'; 'a'}, {a => 2, b => 3, c => 4}; is-deeply %a{'b'; 'a'; 'a'}, 2; is-deeply %a{'b',; 'a'; 'a'}, (2,), 'one-element slice'; is-deeply %a{'b'; 'a',; 'a'}, (2,), 'one-element slice'; is-deeply %a{'b'; 'a'; 'a',}, (2,), 'one-element slice'; is-deeply %a{'b'; *; 'b'}, (3, 7); is-deeply %a{'b'; 'a'; *}.sort.List, (2, 3, 4); %a{'b'; 'a'} = (my $x = 50); nok %a{'b'; 'a'} =:= $x, 'different containers after assigning'; is-deeply %a, T.new((a => 1), (b => {a => 50, b => { a => 6, b => 7}})), 'correct data structure after assigning'; # %a{'b'; 'a'} := (my $y = 100); # ok %a{'b'; 'a'} =:= $y, 'same container after binding'; # is-deeply %a, T.new((a => 1), (b => {a => 100, b => { a => 6, b => 7}})), 'correct data structure after binding'; }