aboutsummaryrefslogtreecommitdiff
path: root/test/behavior
diff options
context:
space:
mode:
authorfn ⌃ ⌥ <70830482+FnControlOption@users.noreply.github.com>2023-01-22 05:30:38 -0800
committerfn ⌃ ⌥ <70830482+FnControlOption@users.noreply.github.com>2023-01-22 05:30:38 -0800
commit6089ed9ee77ed034a39c2b557f4608cd8d779d3f (patch)
tree9eaf9d78ca73d8c2dc1654e1e8beacbed1551988 /test/behavior
parentbe4468be371de34e90a86346b0f6da6f2d85bef4 (diff)
parentc0284e242f7d78955204dc8a627fecd45aa5e521 (diff)
downloadzig-6089ed9ee77ed034a39c2b557f4608cd8d779d3f.tar.gz
zig-6089ed9ee77ed034a39c2b557f4608cd8d779d3f.zip
Merge branch 'master' into crc
Diffstat (limited to 'test/behavior')
-rw-r--r--test/behavior/bugs/12488.zig13
-rw-r--r--test/behavior/fn.zig23
-rw-r--r--test/behavior/pointers.zig16
-rw-r--r--test/behavior/struct.zig5
-rw-r--r--test/behavior/vector.zig11
5 files changed, 55 insertions, 13 deletions
diff --git a/test/behavior/bugs/12488.zig b/test/behavior/bugs/12488.zig
deleted file mode 100644
index b05197b24f..0000000000
--- a/test/behavior/bugs/12488.zig
+++ /dev/null
@@ -1,13 +0,0 @@
-const expect = @import("std").testing.expect;
-
-const A = struct {
- a: u32,
-};
-
-fn foo(comptime a: anytype) !void {
- try expect(a[0][0] == @sizeOf(A));
-}
-
-test {
- try foo(.{[_]usize{@sizeOf(A)}});
-}
diff --git a/test/behavior/fn.zig b/test/behavior/fn.zig
index 8dca94a656..d5f959e507 100644
--- a/test/behavior/fn.zig
+++ b/test/behavior/fn.zig
@@ -517,3 +517,26 @@ test "peer type resolution of inferred error set with non-void payload" {
};
try expect(try S.openDataFile(.read) == 1);
}
+
+test "lazy values passed to anytype parameter" {
+ const A = struct {
+ a: u32,
+ fn foo(comptime a: anytype) !void {
+ try expect(a[0][0] == @sizeOf(@This()));
+ }
+ };
+ try A.foo(.{[_]usize{@sizeOf(A)}});
+
+ const B = struct {
+ fn foo(comptime a: anytype) !void {
+ try expect(a.x == 0);
+ }
+ };
+ try B.foo(.{ .x = @sizeOf(B) });
+
+ const C = struct {};
+ try expect(@truncate(u32, @sizeOf(C)) == 0);
+
+ const D = struct {};
+ try expect(@sizeOf(D) << 1 == 0);
+}
diff --git a/test/behavior/pointers.zig b/test/behavior/pointers.zig
index c8879453ad..2d55292916 100644
--- a/test/behavior/pointers.zig
+++ b/test/behavior/pointers.zig
@@ -509,6 +509,7 @@ test "ptrCast comptime known slice to C pointer" {
test "ptrToInt on a generic function" {
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
@@ -532,3 +533,18 @@ test "pointer alignment and element type include call expression" {
};
try expect(@alignOf(S.P) > 0);
}
+
+test "pointer to array has explicit alignment" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ const Base = extern struct { a: u8 };
+ const Base2 = extern struct { a: u8 };
+ fn func(ptr: *[4]Base) *align(1) [4]Base2 {
+ return @alignCast(1, @ptrCast(*[4]Base2, ptr));
+ }
+ };
+ var bases = [_]S.Base{.{ .a = 2 }} ** 4;
+ const casted = S.func(&bases);
+ try expect(casted[0].a == 2);
+}
diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig
index a32a0ed495..ed3e1ce88f 100644
--- a/test/behavior/struct.zig
+++ b/test/behavior/struct.zig
@@ -1573,3 +1573,8 @@ test "struct fields get automatically reordered" {
};
try expect(@sizeOf(S1) == @sizeOf(S2));
}
+
+test "directly initiating tuple like struct" {
+ const a = struct { u8 }{8};
+ try expect(a[0] == 8);
+}
diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig
index ba3d98ee56..8bcae5fefc 100644
--- a/test/behavior/vector.zig
+++ b/test/behavior/vector.zig
@@ -1286,3 +1286,14 @@ test "store to vector in slice" {
s[i] = s[0];
try expectEqual(v[1], v[0]);
}
+
+test "addition of vectors represented as strings" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+
+ const V = @Vector(3, u8);
+ const foo: V = "foo".*;
+ const bar: V = @typeName(u32).*;
+ try expectEqual(V{ 219, 162, 161 }, foo + bar);
+}