master
 1const expect = @import("std").testing.expect;
 2
 3test "pointer arithmetic with many-item pointer" {
 4    const array = [_]i32{ 1, 2, 3, 4 };
 5    var ptr: [*]const i32 = &array;
 6
 7    try expect(ptr[0] == 1);
 8    ptr += 1;
 9    try expect(ptr[0] == 2);
10
11    // slicing a many-item pointer without an end is equivalent to
12    // pointer arithmetic: `ptr[start..] == ptr + start`
13    try expect(ptr[1..] == ptr + 1);
14
15    // subtraction between any two pointers except slices based on element size is supported
16    try expect(&ptr[1] - &ptr[0] == 1);
17}
18
19test "pointer arithmetic with slices" {
20    var array = [_]i32{ 1, 2, 3, 4 };
21    var length: usize = 0; // var to make it runtime-known
22    _ = &length; // suppress 'var is never mutated' error
23    var slice = array[length..array.len];
24
25    try expect(slice[0] == 1);
26    try expect(slice.len == 4);
27
28    slice.ptr += 1;
29    // now the slice is in an bad state since len has not been updated
30
31    try expect(slice[0] == 2);
32    try expect(slice.len == 4);
33}
34
35// test