forked from Raku/roast
/
array-shapes.t
61 lines (50 loc) · 2 KB
/
array-shapes.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use v6;
use Test;
plan(*);
# L<S09/Fixed-size arrays>
{
my @arr[*];
@arr[42] = "foo";
is(+@arr, 43, 'my @arr[*] autoextends like my @arr');
}
{
my @arr[7] = <a b c d e f g>;
is(@arr, [<a b c d e f g>], 'my @arr[num] can hold num things');
dies_ok({push @arr, 'h'}, 'adding past num items in my @arr[num] dies');
dies_ok({@arr[7]}, 'accessing past num items in my @arr[num] dies');
}
{
lives_ok({ my @arr\ [7]}, 'array with fixed size with unspace');
eval_dies_ok('my @arr.[8]', 'array with dot form dies');
eval_dies_ok('my @arr\ .[8]', 'array with dot form and unspace dies');
}
# L<S09/Typed arrays>
{
my @arr of Int = 1, 2, 3, 4, 5;
is(@arr, <1 2 3 4 5>, 'my @arr of Type works');
#?rakudo 2 todo "parametrization issues"
dies_ok({push @arr, 's'}, 'type constraints on my @arr of Type works (1)');
dies_ok({push @arr, 4.2}, 'type constraints on my @arr of Type works (2)');
}
{
my @arr[5] of Int = <1 2 3 4 5>;
is(@arr, <1 2 3 4 5>, 'my @arr[num] of Type works');
dies_ok({push @arr, 123}, 'boundary constraints on my @arr[num] of Type works');
pop @arr; # remove the last item to ensure the next ones are type constraints
dies_ok({push @arr, 's'}, 'type constraints on my @arr[num] of Type works (1)');
dies_ok({push @arr, 4.2}, 'type constraints on my @arr[num] of Type works (2)');
}
{
my int @arr = 1, 2, 3, 4, 5;
is(@arr, <1 2 3 4 5>, 'my Type @arr works');
dies_ok({push @arr, 's'}, 'type constraints on my Type @arr works (1)');
dies_ok({push @arr, 4.2}, 'type constraints on my Type @arr works (2)');
}
{
my int @arr[5] = <1 2 3 4 5>;
is(@arr, <1 2 3 4 5>, 'my Type @arr[num] works');
dies_ok({push @arr, 123}, 'boundary constraints on my Type @arr[num] works');
pop @arr; # remove the last item to ensure the next ones are type constraints
dies_ok({push @arr, 's'}, 'type constraints on my Type @arr[num] works (1)');
dies_ok({push @arr, 4.2}, 'type constraints on my Type @arr[num] works (2)');
}