Skip to content

Commit 8ddf9d8

Browse files
committed
add behavior tests for slicing with comptime indexes
1 parent f824658 commit 8ddf9d8

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

test/stage1/behavior/slice.zig

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,21 @@ test "@ptrCast slice to pointer" {
145145
comptime S.doTheTest();
146146
}
147147

148-
test "slicing producing an array" {
148+
test "slice syntax resulting in pointer-to-array" {
149149
const S = struct {
150150
fn doTheTest() void {
151151
testArray();
152152
testArrayZ();
153+
testArray0();
154+
testArrayAlign();
153155
testPointer();
154156
testPointerZ();
157+
testPointer0();
158+
testPointerAlign();
155159
testSlice();
156160
testSliceZ();
161+
testSlice0();
162+
testSliceAlign();
157163
}
158164

159165
fn testArray() void {
@@ -172,6 +178,28 @@ test "slicing producing an array" {
172178
comptime expect(@TypeOf(array[1..3 :4]) == *[2:4]u8);
173179
}
174180

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+
175203
fn testPointer() void {
176204
var array = [5]u8{ 1, 2, 3, 4, 5 };
177205
var pointer: [*]u8 = &array;
@@ -188,6 +216,22 @@ test "slicing producing an array" {
188216
comptime expect(@TypeOf(pointer[1..3 :4]) == *[2:4]u8);
189217
}
190218

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+
191235
fn testSlice() void {
192236
var array = [5]u8{ 1, 2, 3, 4, 5 };
193237
var src_slice: []u8 = &array;
@@ -204,6 +248,30 @@ test "slicing producing an array" {
204248
comptime expect(@TypeOf(slice[1..]) == [:0]u8);
205249
comptime expect(@TypeOf(slice[1..3 :4]) == *[2:4]u8);
206250
}
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+
}
207275
};
208276

209277
S.doTheTest();

0 commit comments

Comments
 (0)