| ... | @@ -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 | } |
| 182 | | 182 | |
| | 183 | test "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 | |
| 183 | const x = @intToPtr([*]i32, 0x1000)[0..0x500]; | 194 | const x = @intToPtr([*]i32, 0x1000)[0..0x500]; |
| 184 | const y = x[0x100..]; | 195 | const y = x[0x100..]; |
| 185 | test "compile time slice of pointer to hard coded address" { | 196 | test "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 | }; |
| 507 | | 545 | |
| 508 | try S.doTheTest(); | 546 | try S.doTheTest(); |