authorgravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-05-03 12:51:40+10:00
committergravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-05-07 15:55:21+10:00
loge507f0c0aa2267f003ba2afb30448fc723d54418
tree8022d112bece2242c97662d0ca4111c36b851170
parentcba9077cc12b953dd00369f9c0340d7667af1611

test: add behavior tests for pointer slice-by-length


1 files changed, 38 insertions(+), 0 deletions(-)

test/behavior/slice.zig+38
...@@ -180,6 +180,17 @@ test "slicing zero length array" {...@@ -180,6 +180,17 @@ test "slicing zero length array" {
180 try expect(mem.eql(u32, s2, &[_]u32{}));180 try expect(mem.eql(u32, s2, &[_]u32{}));
181}181}
182182
183test "slicing pointer by length" {
184 const array = [_]u8{ 1, 2, 3, 4, 5, 6, 7, 8 };
185 const ptr: [*]const u8 = @ptrCast([*]const u8, &array);
186 const slice = ptr[1..][0..5];
187 try expect(slice.len == 5);
188 var i: usize = 0;
189 while (i < slice.len) : (i += 1) {
190 try expect(slice[i] == i + 2);
191 }
192}
193
183const x = @intToPtr([*]i32, 0x1000)[0..0x500];194const x = @intToPtr([*]i32, 0x1000)[0..0x500];
184const y = x[0x100..];195const y = x[0x100..];
185test "compile time slice of pointer to hard coded address" {196test "compile time slice of pointer to hard coded address" {
...@@ -503,6 +514,33 @@ test "slice syntax resulting in pointer-to-array" {...@@ -503,6 +514,33 @@ test "slice syntax resulting in pointer-to-array" {
503 comptime try expect(@TypeOf(array[1.. :0][0..4]) == *[4:0]u8);514 comptime try expect(@TypeOf(array[1.. :0][0..4]) == *[4:0]u8);
504 comptime try expect(@TypeOf(array[1.. :0][0..2 :4]) == *[2:4]u8);515 comptime try expect(@TypeOf(array[1.. :0][0..2 :4]) == *[2:4]u8);
505 }516 }
517
518 fn testMultiPointer() !void {
519 var array = [5]u8{ 1, 2, 3, 4, 5 };
520 var ptr: [*]u8 = &array;
521 comptime try expect(@TypeOf(ptr[1..][0..2]) == *[2]u8);
522 comptime try expect(@TypeOf(ptr[1..][0..4]) == *[4]u8);
523 comptime try expect(@TypeOf(ptr[1..][0..2 :4]) == *[2:4]u8);
524 }
525
526 fn testMultiPointerLengthZ() !void {
527 var array = [5:0]u8{ 1, 2, 3, 4, 5 };
528 var ptr: [*]u8 = &array;
529 comptime try expect(@TypeOf(ptr[1..][0..2]) == *[2]u8);
530 comptime try expect(@TypeOf(ptr[1..][0..4]) == *[4:0]u8);
531 comptime try expect(@TypeOf(ptr[1..][0..2 :4]) == *[2:4]u8);
532 comptime try expect(@TypeOf(ptr[1.. :0][0..2]) == *[2]u8);
533 comptime try expect(@TypeOf(ptr[1.. :0][0..4]) == *[4:0]u8);
534 comptime try expect(@TypeOf(ptr[1.. :0][0..2 :4]) == *[2:4]u8);
535
536 var ptr_z: [*:0]u8 = &array;
537 comptime try expect(@TypeOf(ptr_z[1..][0..2]) == *[2]u8);
538 comptime try expect(@TypeOf(ptr_z[1..][0..4]) == *[4:0]u8);
539 comptime try expect(@TypeOf(ptr_z[1..][0..2 :4]) == *[2:4]u8);
540 comptime try expect(@TypeOf(ptr_z[1.. :0][0..2]) == *[2]u8);
541 comptime try expect(@TypeOf(ptr_z[1.. :0][0..4]) == *[4:0]u8);
542 comptime try expect(@TypeOf(ptr_z[1.. :0][0..2 :4]) == *[2:4]u8);
543 }
506 };544 };
507545
508 try S.doTheTest();546 try S.doTheTest();