Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

110 lines (94 sloc) 3.34 kb
use v6;
use Test;
plan 21;
# L<S09/Autovivification/In Perl 6 these read-only operations are indeed non-destructive:>
{
# Compare with Perl 5:
# $ perl -we '
# my @array = qw<a b c>;
# my $foo = $array[100];
# print exists $array[30] ? "exists" : "does not exist"
# '
# does not exist
my @array = <a b c d>;
is +@array, 4, "basic sanity";
my $foo = @array[20];
# We've only *accessed* @array[20], but we haven't assigned anything to it, so
# @array shouldn't change. But currently, @array *is* automatically extended,
# i.e. @array is ("a", "b", "c", "d", Mu, Mu, ...). This is wrong.
is +@array, 4,
"accessing a not existing array element should not automatically extend the array";
}
{
my @array = <a b c d>;
@array[20] = 42;
# Now, we did assign @array[20], so @array should get automatically extended.
# @array should be ("a", "b", "c", "d", Mu, Mu, ..., 42).
is +@array, 21,
"creating an array element should automatically extend the array (1)";
# And, of course, @array[20]:exists has to be true -- we've just assigned
# @array[20].
#?niecza skip 'Unable to resolve method exists in class Array'
ok @array[20]:exists,
"creating an array element should automatically extend the array (2)";
}
{
my @array = <a b c d>;
my $defined = defined @array[100];
ok !$defined,
'defined @array[$index_out_of_bounds] should be false';
is +@array, 4,
'defined @array[$index_out_of_bounds] should not have altered @array';
}
{
my @array = <a b c d>;
my $defined;
try { $defined = defined @array[*-5]; }
ok !$defined,
'defined @array[$negative_index_out_of_bounds] should be false';
is +@array, 4,
'defined @array[$negative_index_out_of_bounds] should not have altered @array';
}
#?niecza skip 'Unable to resolve method exists in class Array'
{
my @array = <a b c d>;
my $exists = @array[100]:exists;
ok !$exists,
'@array[$index_out_of_bounds]:exists should be false';
is +@array, 4,
'@array[$index_out_of_bounds]:exists should not have altered @array';
}
#?niecza skip 'Unable to resolve method exists in class Array'
{
my @array = <a b c d>;
my $exists = @array[*-5]:exists;
ok !$exists,
'@array[$negative_index_out_of_bounds]:exists should be false';
is +@array, 4,
'@array[$negative_index_out_of_bounds]:exists should not have altered @array';
}
{
my @a;
@a[2] = 6;
is +@a, 3, '@a[2] = 6 ensures that @a has three items';
nok @a[0].defined, '... and the first is not defined';
nok @a[1].defined, '... and the second is not defined';
is @a[2], 6, '... and the third is 6';
}
# RT #62948
{
my @a;
@a[2] = 'b';
my @b = @a;
is +@b, 3, 'really a degenerative case of assigning list to array';
@b = (6, @a);
is +@b, 4, 'assigning list with extended array to an array';
my $s = @a.join(':');
is $s, '::b', 'join on extended array';
my $n = + @a.grep({ $_ eq 'b'});
is $n, 1, 'grep on extended array';
@a[1] = 'c'; # cmp doesn't handle Mu cmp Mu yet
#?niecza todo 'min on list with undefined el ignores it'
is @a.min(), 'b', 'min on list with undefined el ignores it';
}
# vim: ft=perl6
Jump to Line
Something went wrong with that request. Please try again.