1const expectEqual = @import("std").testing.expectEqual;
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 expectEqual(1, ptr[0]);
8 ptr += 1;
9 try expectEqual(2, ptr[0]);
10
11 // slicing a many-item pointer without an end is equivalent to
12 // pointer arithmetic: `ptr[start..] == ptr + start`
13 try expectEqual(ptr[1..], ptr + 1);
14
15 // subtraction between any two pointers except slices based on element size is supported
16 try expectEqual(1, &ptr[1] - &ptr[0]);
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 expectEqual(1, slice[0]);
26 try expectEqual(4, slice.len);
27
28 slice.ptr += 1;
29 // now the slice is in an bad state since len has not been updated
30
31 try expectEqual(2, slice[0]);
32 try expectEqual(4, slice.len);
33}
34
35// test