aboutsummaryrefslogtreecommitdiff
path: root/test/cases/array.zig
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-06-04 22:11:14 -0400
committerGitHub <noreply@github.com>2018-06-04 22:11:14 -0400
commite53b683bd3958a7b1c517e2391edce42b9d4e48b (patch)
treec9b8aacf92b2140c1cc076e2de280e10657d0a98 /test/cases/array.zig
parent32e0dfd4f0dab351a024e7680280343db5d7c43e (diff)
downloadzig-e53b683bd3958a7b1c517e2391edce42b9d4e48b.tar.gz
zig-e53b683bd3958a7b1c517e2391edce42b9d4e48b.zip
Pointer Reform: proper slicing and indexing (#1053)
* enable slicing for single-item ptr to arrays * disable slicing for other single-item pointers * enable indexing for single-item ptr to arrays * disable indexing for other single-item pointers see #770 closes #386
Diffstat (limited to 'test/cases/array.zig')
-rw-r--r--test/cases/array.zig29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/cases/array.zig b/test/cases/array.zig
index 9a405216d8..ef919b27bd 100644
--- a/test/cases/array.zig
+++ b/test/cases/array.zig
@@ -115,3 +115,32 @@ test "array len property" {
var x: [5]i32 = undefined;
assert(@typeOf(x).len == 5);
}
+
+test "single-item pointer to array indexing and slicing" {
+ testSingleItemPtrArrayIndexSlice();
+ comptime testSingleItemPtrArrayIndexSlice();
+}
+
+fn testSingleItemPtrArrayIndexSlice() void {
+ var array = "aaaa";
+ doSomeMangling(&array);
+ assert(mem.eql(u8, "azya", array));
+}
+
+fn doSomeMangling(array: *[4]u8) void {
+ array[1] = 'z';
+ array[2..3][0] = 'y';
+}
+
+test "implicit cast single-item pointer" {
+ testImplicitCastSingleItemPtr();
+ comptime testImplicitCastSingleItemPtr();
+}
+
+fn testImplicitCastSingleItemPtr() void {
+ var byte: u8 = 100;
+ const slice = (*[1]u8)(&byte)[0..];
+ slice[0] += 1;
+ assert(byte == 101);
+}
+