diff options
| author | John Schmidt <john.schmidt.h@gmail.com> | 2023-03-08 17:49:52 +0100 |
|---|---|---|
| committer | John Schmidt <john.schmidt.h@gmail.com> | 2023-03-09 00:55:17 +0100 |
| commit | 505e720421ce4f7ed11730fe68d32e3bba711f3c (patch) | |
| tree | 9bb76c6995902416714832b5506218b8b12a8251 /test/behavior/vector.zig | |
| parent | 06b263825a67e68cec128c640a6287fa1716dc63 (diff) | |
| download | zig-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.zig | 19 |
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 |
