From 8ddf9d84ffb208042ae7ea0fb3dc9fbfb2b5c983 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 19 Mar 2020 11:17:46 -0400 Subject: add behavior tests for slicing with comptime indexes --- test/stage1/behavior/slice.zig | 70 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/stage1/behavior/slice.zig b/test/stage1/behavior/slice.zig index 203a3b72d3..d58132cb08 100644 --- a/test/stage1/behavior/slice.zig +++ b/test/stage1/behavior/slice.zig @@ -145,15 +145,21 @@ test "@ptrCast slice to pointer" { comptime S.doTheTest(); } -test "slicing producing an array" { +test "slice syntax resulting in pointer-to-array" { const S = struct { fn doTheTest() void { testArray(); testArrayZ(); + testArray0(); + testArrayAlign(); testPointer(); testPointerZ(); + testPointer0(); + testPointerAlign(); testSlice(); testSliceZ(); + testSlice0(); + testSliceAlign(); } fn testArray() void { @@ -172,6 +178,28 @@ test "slicing producing an array" { comptime expect(@TypeOf(array[1..3 :4]) == *[2:4]u8); } + fn testArray0() void { + { + var array = [0]u8{}; + var slice = array[0..0]; + comptime expect(@TypeOf(slice) == *[0]u8); + } + { + var array = [0:0]u8{}; + var slice = array[0..0]; + comptime expect(@TypeOf(slice) == *[0:0]u8); + expect(slice[0] == 0); + } + } + + fn testArrayAlign() void { + var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; + var slice = array[4..5]; + comptime expect(@TypeOf(slice) == *align(4) [1]u8); + expect(slice[0] == 5); + comptime expect(@TypeOf(array[0..2]) == *align(4) [2]u8); + } + fn testPointer() void { var array = [5]u8{ 1, 2, 3, 4, 5 }; var pointer: [*]u8 = &array; @@ -188,6 +216,22 @@ test "slicing producing an array" { comptime expect(@TypeOf(pointer[1..3 :4]) == *[2:4]u8); } + fn testPointer0() void { + var pointer: [*]u0 = &[1]u0{0}; + var slice = pointer[0..1]; + comptime expect(@TypeOf(slice) == *[1]u0); + expect(slice[0] == 0); + } + + fn testPointerAlign() void { + var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; + var pointer: [*]align(4) u8 = &array; + var slice = pointer[4..5]; + comptime expect(@TypeOf(slice) == *align(4) [1]u8); + expect(slice[0] == 5); + comptime expect(@TypeOf(pointer[0..2]) == *align(4) [2]u8); + } + fn testSlice() void { var array = [5]u8{ 1, 2, 3, 4, 5 }; var src_slice: []u8 = &array; @@ -204,6 +248,30 @@ test "slicing producing an array" { comptime expect(@TypeOf(slice[1..]) == [:0]u8); comptime expect(@TypeOf(slice[1..3 :4]) == *[2:4]u8); } + + fn testSlice0() void { + { + var array = [0]u8{}; + var src_slice: []u8 = &array; + var slice = src_slice[0..0]; + comptime expect(@TypeOf(slice) == *[0]u8); + } + { + var array = [0:0]u8{}; + var src_slice: [:0]u8 = &array; + var slice = src_slice[0..0]; + comptime expect(@TypeOf(slice) == *[0]u8); + } + } + + fn testSliceAlign() void { + var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; + var src_slice: []align(4) u8 = &array; + var slice = src_slice[4..5]; + comptime expect(@TypeOf(slice) == *align(4) [1]u8); + expect(slice[0] == 5); + comptime expect(@TypeOf(src_slice[0..2]) == *align(4) [2]u8); + } }; S.doTheTest(); -- cgit v1.2.3