-
Notifications
You must be signed in to change notification settings - Fork 135
/
delete.t
137 lines (117 loc) · 4.3 KB
/
delete.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
use v6;
use Test;
plan 32;
=begin description
Basic C<delete> tests, see S32.
=end description
# L<S32::Containers/"Array"/=item delete>
sub make-string(@a) {
~@a.map({ $_ // "Any()" });
}
# W/ positive indices:
{
my @array = <a b c d>;
is ~@array, "a b c d", "basic sanity (1)";
is ~(@array[2]:delete), "c",
"deletion of an array element returned the right thing";
is make-string(@array), "a b Any() d", "deletion of an array element";
is ~(@array[3]:delete), "d",
"deletion of array elements returned the right things";
is make-string(@array), "a b", "deletion of array elements (1)";
is +@array, 2, "deletion of array elements (2)";
}
# W/ negative indices:
{
my @array = <a b c d>;
is ~(@array[*-2]:delete), "c",
"deletion of array element accessed by an negative index returned the right thing";
# @array is now ("a", "b", Any, "d") ==> double spaces
is make-string(@array), "a b Any() d", "deletion of an array element accessed by an negative index (1)";
is +@array, 4, "deletion of an array element accessed by an negative index (2)";
is ~(@array[*-1]:delete), "d",
"deletion of last array element returned the right thing";
# @array is now ("a", "b")
is ~@array, "a b", "deletion of last array element (1)";
is +@array, 2, "deletion of last array element (2)";
}
# W/ multiple positive and negative indices:
{
my @array = <a b c d e f>;
is ~(@array[2, *-3, *-1]:delete), "c d f",
"deletion of array elements accessed by positive and negative indices returned right things";
# @array is now ("a", "b", Any, Any, "e") ==> double spaces
is make-string(@array), "a b Any() Any() e",
"deletion of array elements accessed by positive and negative indices (1)";
is +@array, 5,
"deletion of array elements accessed by positive and negative indices (2)";
}
# Results taken from Perl 5
#?niecza todo "Not sure if this test is correct or not"
{
my @array = <a b c>;
is ~(@array[2, *-1]:delete), "c ",
"deletion of the same array element accessed by different indices returned right things";
is ~@array, "a b",
"deletion of the same array element accessed by different indices (1)";
is +@array, 2,
"deletion of the same array element accessed by different indices (2)";
}
# L<S32::Containers/"Array"/"Deleted elements at the end of an Array">
{
my @array;
@array[8] = 'eight';
@array[8]:delete;
is +@array, 0, 'deletion of trailing items purge empty positions';
}
# W/ one range of positive indices
{
my @array = <a b c d e f>;
is ~(@array[2..4]:delete), "c d e",
"deletion of array elements accessed by a range of positives indices returned right things";
# @array is now ("a", "b", Any, Any, Any, "f") ==> 4 spaces
is make-string(@array), "a b Any() Any() Any() f",
"deletion of array elements accessed by a range of positive indices (1)";
is +@array, 6,
"deletion of array elements accessed by a range of positive indices (2)";
}
{
my @array = <a b c d e f>;
is ~(@array[2^..4]:delete), "d e",
"deletion of array elements accessed by a range of positives indices returned right things (2)";
# @array is now ("a", "b", "c", Any, Any, "f") ==> 4 spaces
is make-string(@array), "a b c Any() Any() f",
"deletion of array elements accessed by a range of positive indices (3)";
is +@array, 6,
"deletion of array elements accessed by a range of positive indices (4)";
}
# RT #67446
{
my @array = 0..1;
is ~(EVAL @array.perl ), '0 1', '@array.perl works after init';
is ~( map { 1 }, @array ), '1 1', 'map @array works after init';
@array[0]:delete;
lives-ok { @array.perl }, '@array.perl lives after delete';
lives-ok { map { 1 }, @array }, 'map @array lives after delete';
}
# RT #116695
{
my @array;
@array[0,2] = (Any, 'two');
@array[2]:delete;
is @array.elems, 1,
'deletion of trailing item does not purge elements we assigned to (1)';
@array[1,2] = (Any, 'two');
@array[2]:delete;
is @array.elems, 2,
'deletion of trailing item does not purge elements we assigned to (2)';
}
# RT #125457
{
my @array = 1, 2, 3;
@array[2]:delete;
@array[3] = 4;
is @array[2], Any, 'deletion of trailing item followed by add item beyond does not resurrect deleted item';
}
# TODO More exclusive bounds checks
# TODO W/ multiple ranges
# vim: ft=perl6