@@ -145,15 +145,21 @@ test "@ptrCast slice to pointer" {
145
145
comptime S .doTheTest ();
146
146
}
147
147
148
- test "slicing producing an array" {
148
+ test "slice syntax resulting in pointer-to- array" {
149
149
const S = struct {
150
150
fn doTheTest () void {
151
151
testArray ();
152
152
testArrayZ ();
153
+ testArray0 ();
154
+ testArrayAlign ();
153
155
testPointer ();
154
156
testPointerZ ();
157
+ testPointer0 ();
158
+ testPointerAlign ();
155
159
testSlice ();
156
160
testSliceZ ();
161
+ testSlice0 ();
162
+ testSliceAlign ();
157
163
}
158
164
159
165
fn testArray () void {
@@ -172,6 +178,28 @@ test "slicing producing an array" {
172
178
comptime expect (@TypeOf (array [1.. 3 :4 ]) == * [2 :4 ]u8 );
173
179
}
174
180
181
+ fn testArray0 () void {
182
+ {
183
+ var array = [0 ]u8 {};
184
+ var slice = array [0.. 0];
185
+ comptime expect (@TypeOf (slice ) == * [0 ]u8 );
186
+ }
187
+ {
188
+ var array = [0 :0 ]u8 {};
189
+ var slice = array [0.. 0];
190
+ comptime expect (@TypeOf (slice ) == * [0 :0 ]u8 );
191
+ expect (slice [0 ] == 0 );
192
+ }
193
+ }
194
+
195
+ fn testArrayAlign () void {
196
+ var array align (4 ) = [5 ]u8 { 1 , 2 , 3 , 4 , 5 };
197
+ var slice = array [4.. 5];
198
+ comptime expect (@TypeOf (slice ) == * align (4 ) [1 ]u8 );
199
+ expect (slice [0 ] == 5 );
200
+ comptime expect (@TypeOf (array [0.. 2]) == * align (4 ) [2 ]u8 );
201
+ }
202
+
175
203
fn testPointer () void {
176
204
var array = [5 ]u8 { 1 , 2 , 3 , 4 , 5 };
177
205
var pointer : [* ]u8 = & array ;
@@ -188,6 +216,22 @@ test "slicing producing an array" {
188
216
comptime expect (@TypeOf (pointer [1.. 3 :4 ]) == * [2 :4 ]u8 );
189
217
}
190
218
219
+ fn testPointer0 () void {
220
+ var pointer : [* ]u0 = &[1 ]u0 {0 };
221
+ var slice = pointer [0.. 1];
222
+ comptime expect (@TypeOf (slice ) == * [1 ]u0 );
223
+ expect (slice [0 ] == 0 );
224
+ }
225
+
226
+ fn testPointerAlign () void {
227
+ var array align (4 ) = [5 ]u8 { 1 , 2 , 3 , 4 , 5 };
228
+ var pointer : [* ]align (4 ) u8 = & array ;
229
+ var slice = pointer [4.. 5];
230
+ comptime expect (@TypeOf (slice ) == * align (4 ) [1 ]u8 );
231
+ expect (slice [0 ] == 5 );
232
+ comptime expect (@TypeOf (pointer [0.. 2]) == * align (4 ) [2 ]u8 );
233
+ }
234
+
191
235
fn testSlice () void {
192
236
var array = [5 ]u8 { 1 , 2 , 3 , 4 , 5 };
193
237
var src_slice : []u8 = & array ;
@@ -204,6 +248,30 @@ test "slicing producing an array" {
204
248
comptime expect (@TypeOf (slice [1.. ]) == [:0 ]u8 );
205
249
comptime expect (@TypeOf (slice [1.. 3 :4 ]) == * [2 :4 ]u8 );
206
250
}
251
+
252
+ fn testSlice0 () void {
253
+ {
254
+ var array = [0 ]u8 {};
255
+ var src_slice : []u8 = & array ;
256
+ var slice = src_slice [0.. 0];
257
+ comptime expect (@TypeOf (slice ) == * [0 ]u8 );
258
+ }
259
+ {
260
+ var array = [0 :0 ]u8 {};
261
+ var src_slice : [:0 ]u8 = & array ;
262
+ var slice = src_slice [0.. 0];
263
+ comptime expect (@TypeOf (slice ) == * [0 ]u8 );
264
+ }
265
+ }
266
+
267
+ fn testSliceAlign () void {
268
+ var array align (4 ) = [5 ]u8 { 1 , 2 , 3 , 4 , 5 };
269
+ var src_slice : []align (4 ) u8 = & array ;
270
+ var slice = src_slice [4.. 5];
271
+ comptime expect (@TypeOf (slice ) == * align (4 ) [1 ]u8 );
272
+ expect (slice [0 ] == 5 );
273
+ comptime expect (@TypeOf (src_slice [0.. 2]) == * align (4 ) [2 ]u8 );
274
+ }
207
275
};
208
276
209
277
S .doTheTest ();
0 commit comments