test49
auto test49 =
q{--- test49
// Test full suite of pointer arithmetic operations
void preIncrement(i32* arr, i32 length) {
(++arr)[-1] = 10; // arr[0] = 10, negative index
*arr = 15; // arr[1] = 15, deref pointer
}
void preDecrement(i32* arr, i32 length) {
(--arr)[1] = 20; // arr[0] = 20
arr[2] = 25; // arr[1] = 25
}
void postIncrement(i32* arr, i32 length) {
(arr++)[0] = 30; // arr[0] = 30
arr[0] = 35; // arr[1] = 35
}
void postDecrement(i32* arr, i32 length) {
(arr--)[0] = 40; // arr[0] = 40
arr[2] = 45; // arr[1] = 45
}
void addInt(i32* arr, i32 length) {
*(arr + 3) = 50; // arr[3] = 50
}
void subInt(i32* arr, i32 length) {
*(arr - 3) = 60; // arr[-4] = 60
}
void diff(i32* arr, i32 length) {
i32* last = arr + length; // last = &arr[4];
// sub two pointers
i64 diff = last - arr;
arr[length - 3] = cast(i32)diff; // ar[1] = 4
}
void plusEqual(i32* arr, i32 length) {
arr += 3;
arr[0] = 90; // arr[3] = 90
}
void minusEqual(i32* arr, i32 length) {
arr -= 3;
arr[3] = 100; // arr[0] = 100
}
};
tests passing
functionsvariables