aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/vector.zig
diff options
context:
space:
mode:
authorJohn Schmidt <john.schmidt.h@gmail.com>2023-03-08 17:49:52 +0100
committerJohn Schmidt <john.schmidt.h@gmail.com>2023-03-09 00:55:17 +0100
commit505e720421ce4f7ed11730fe68d32e3bba711f3c (patch)
tree9bb76c6995902416714832b5506218b8b12a8251 /test/behavior/vector.zig
parent06b263825a67e68cec128c640a6287fa1716dc63 (diff)
downloadzig-505e720421ce4f7ed11730fe68d32e3bba711f3c.tar.gz
zig-505e720421ce4f7ed11730fe68d32e3bba711f3c.zip
sema: add peer type resolution for vectors
This is consistent with how coercion for vectors work. So now you can do this: ``` var a: @Vector(2, u16) = .{1, 2}; var b: @Vector(2, u8) = .{2, 1}; const c = @min(a, b); ``` where previously you had to cast explicitly: ``` var a: @Vector(2, u16) = .{1, 2}; var b: @Vector(2, u8) = .{2, 1}; var c: @Vector(2, u16) = b; const c = @min(a, c); ```
Diffstat (limited to 'test/behavior/vector.zig')
-rw-r--r--test/behavior/vector.zig19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig
index 1d9d517a96..2c7be227c4 100644
--- a/test/behavior/vector.zig
+++ b/test/behavior/vector.zig
@@ -175,6 +175,25 @@ test "array to vector" {
comptime try S.doTheTest();
}
+test "peer type resolution with coercible element types" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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_sparc64) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ fn doTheTest() !void {
+ var b: @Vector(2, u8) = .{ 1, 2 };
+ var a: @Vector(2, u16) = .{ 2, 1 };
+ var t: bool = true;
+ var c = if (t) a else b;
+ try std.testing.expect(@TypeOf(c) == @Vector(2, u16));
+ }
+ };
+ comptime try S.doTheTest();
+}
+
test "tuple to vector" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO