authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-03-19 11:17:46-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-03-19 11:17:46-04:00
log8ddf9d84ffb208042ae7ea0fb3dc9fbfb2b5c983
tree6980da3f85272c007867edbe94df40f51f491882
parentf824658e136738ea75c8bb3b53d9a67b2c4402b7
signaturelock-open Commit is signed but in an unrecognized format.

add behavior tests for slicing with comptime indexes


1 files changed, 69 insertions(+), 1 deletions(-)

test/stage1/behavior/slice.zig+69-1
......@@ -145,15 +145,21 @@ test "@ptrCast slice to pointer" {
145145 comptime S.doTheTest();
146146}
147147
148test "slicing producing an array" {
148test "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();