use v6-alpha; use Test; plan 58; # L # Adverbs on array subscripts # :p { my @array = ; isa_ok eval('@array[0]:p'), Pair, ":p on an array returned a Pair", :todo; is ~eval('@array[0]:p'), "0\tA", ":p on an array returned the correct pair", :todo; eval('@array[0]:p.value = "a"'); is @array[0], "a", ":p on an array returns lvalues (like normal subscripts do as well)", :todo; is +eval('@array[0,1]:p'), 2, ":p on an array returned a two-elem array", :todo; is ~eval('@array[0,1]:p'), "0\ta 1\tB", ":p on an array returned a two-elem array consisting of the correct pairs", :todo; is +eval('@array[42,23]:p'), 0, ":p on an array weeded out non-existing entries (1)"; is ~eval('@array[42,23]:p'), "", ":p on an array weeded out non-existing entries (2)"; } # :kv { my @array = ; is +eval('@array[0]:kv'), 2, ":kv on an array returned a two-elem array", :todo; is ~eval('@array[0]:kv'), "0 A", ":kv on an array returned the correct two-elem array", :todo; eval('(@array[0]:kv)[1] = "a"'); is @array[0], "a", ":kv on an array returns lvalues (like normal subscripts do as well)", :todo; is +eval('@array[0,1]:kv'), 4, ":kv on an array returned a four-elem array", :todo; is ~eval('@array[0,1]:kv'), "0 a 1 B", ":kv on an array returned the correct four-elem array", :todo; is +eval('@array[42,23]:kv'), 0, ":kv on an array weeded out non-existing entries (1)"; is ~eval('@array[42,23]:kv'), "", ":kv on an array weeded out non-existing entries (2)"; } # :k { my @array = ; is +eval('@array[0]:k'), 1, ":k on an array returned an one-elem array", :todo; is ~eval('@array[0]:k'), "0", ":k on an array returned the correct one-elem array", :todo; is +eval('@array[0,1]:k'), 2, ":k on an array returned a tow-elem array", :todo; is ~eval('@array[0,1]:k'), "0 1", ":k on an array returned the correct two-elem array", :todo; is +eval('@array[42,23]:k'), 0, ":k on an array weeded out non-existing entries (1)"; is ~eval('@array[42,23]:k'), "", ":k on an array weeded out non-existing entries (2)"; } # :v { my @array = ; is +eval('@array[0]:v'), 1, ":v on an array returned an one-elem array", :todo; is ~eval('@array[0]:v'), "A", ":v on an array returned the correct one-elem array", :todo; eval('@array[0]:v = "a"'); is @array[0], "a", ":v on an array returns lvalues (like normal subscripts do as well)", :todo; is +eval('@array[0,1]:v'), 2, ":v on an array returned a tow-elem array", :todo; is ~eval('@array[0,1]:v'), "a B", ":v on an array returned the correct two-elem array", :todo; is +eval('@array[42,23]:v'), 0, ":v on an array weeded out non-existing entries (1)"; is ~eval('@array[42,23]:v'), "", ":v on an array weeded out non-existing entries (2)"; } # Adverbs on hash subscripts # :p { my %hash = (0 => "A", 1 => "B"); isa_ok eval('%hash<0>:p'), Pair, ":p on a hash returned a Pair", :todo; is ~eval('%hash<0>:p'), "0\tA", ":p on a hash returned the correct pair", :todo; eval('%hash<0>:p.value = "a"'); is %hash<0>, "a", ":p on a hash returns lvalues (like normal subscripts do as well)", :todo; is +eval('%hash<0 1>:p'), 2, ":p on a hash returned a two-elem array", :todo; is ~eval('%hash<0 1>:p'), "0\ta 1\tB", ":p on a hash returned a two-elem array consisting of the correct pairs", :todo; is +eval('%hash<42 23>:p'), 0, ":p on a hash weeded out non-existing entries (1)"; is ~eval('%hash<42 23>:p'), "", ":p on a hash weeded out non-existing entries (2)"; } # :kv { my %hash = (0 => "A", 1 => "B"); is +eval('%hash<0>:kv'), 2, ":kv on a hash returned a two-elem array", :todo; is ~eval('%hash<0>:kv'), "0 A", ":kv on a hash returned the correct two-elem array", :todo; eval('(%hash<0>:kv)[1] = "a"'); is %hash<0>, "a", ":kv on a hash returns lvalues (like normal subscripts do as well)", :todo; is +eval('%hash<0 1>:kv'), 4, ":kv on a hash returned a four-elem array", :todo; is ~eval('%hash<0 1>:kv'), "0 a 1 B", ":kv on a hash returned the correct four-elem array", :todo; is +eval('%hash<42 23>:kv'), 0, ":kv on a hash weeded out non-existing entries (1)"; is ~eval('%hash<42 23>:kv'), "", ":kv on a hash weeded out non-existing entries (2)"; } # :k { my %hash = (0 => "A", 1 => "B"); is +eval('%hash<0>:k'), 1, ":k on a hash returned an one-elem array", :todo; is ~eval('%hash<0>:k'), "0", ":k on a hash returned the correct one-elem array", :todo; is +eval('%hash<0 1>:k'), 2, ":k on a hash returned a tow-elem array", :todo; is ~eval('%hash<0 1>:k'), "0 1", ":k on a hash returned the correct two-elem array", :todo; is +eval('%hash<42 23>:k'), 0, ":k on a hash weeded out non-existing entries (1)"; is ~eval('%hash<42 23>:k'), "", ":k on a hash weeded out non-existing entries (2)"; } # :v { my %hash = (0 => "A", 1 => "B"); is +eval('%hash<0>:v'), 1, ":v on a hash returned an one-elem array", :todo; is ~eval('%hash<0>:v'), "A", ":v on a hash returned the correct one-elem array", :todo; eval('%hash<0>:v = "a"'); is %hash<0>, "a", ":v on a hash returns lvalues (like normal subscripts do as well)", :todo; is +eval('%hash<0 1>:v'), 2, ":v on a hash returned a tow-elem array", :todo; is ~eval('%hash<0 1>:v'), "a B", ":v on a hash returned the correct two-elem array", :todo; is +eval('%hash<42 23>:v'), 0, ":v on a hash weeded out non-existing entries (1)"; is ~eval('%hash<42 23>:v'), "", ":v on a hash weeded out non-existing entries (2)"; } # The adverbial forms weed out non-existing entries, but undefined (but # existing) entries should be unaffected by this rule. { my @array = (42, undef, 23); is +eval('@array[0,1,2]:kv'), 6, "undefined but existing entries should not be weeded out (1)", :todo; is ~eval('@array[0,1,2]:kv'), "0 42 1 2 23", "undefined but existing entries should not be weeded out (2)", :todo; } { my %hash = (0 => 42, 1 => undef, 2 => 23); is +eval('%hash<0 1 2>:kv'), 6, "undefined but existing entries should not be weeded out (3)", :todo; is ~eval('%hash<0 1 2>:kv'), "0 42 1 2 23", "undefined but existing entries should not be weeded out (4)", :todo; }