aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/enum.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-06-20 11:40:14 -0400
committerVeikka Tuominen <git@vexu.eu>2023-06-20 20:09:28 -0700
commit8875efe54873b721cc3a6f6d83525b19d1c59ec3 (patch)
treecfc48f81d16e591f69bd99a1c7184ebbc1480209 /test/behavior/enum.zig
parent3267eb3a28f6c747772a40beedac14f5feae814f (diff)
downloadzig-8875efe54873b721cc3a6f6d83525b19d1c59ec3.tar.gz
zig-8875efe54873b721cc3a6f6d83525b19d1c59ec3.zip
Sema: fix auto-numbered enums with signed tag types
Closes #16095
Diffstat (limited to 'test/behavior/enum.zig')
-rw-r--r--test/behavior/enum.zig20
1 files changed, 15 insertions, 5 deletions
diff --git a/test/behavior/enum.zig b/test/behavior/enum.zig
index 4280a954dc..1076f5e3ea 100644
--- a/test/behavior/enum.zig
+++ b/test/behavior/enum.zig
@@ -812,11 +812,6 @@ test "signed integer as enum tag" {
try expect(@intFromEnum(SignedEnum.A2) == 1);
}
-test "int to enum with signed tag type" {
- const E = enum(i32) { a, b, c };
- try expect(@intToEnum(E, 0) == .a);
-}
-
test "enum with one member and custom tag type" {
const E = enum(u2) {
One,
@@ -1202,3 +1197,18 @@ test "enum tag from a local variable" {
const i = @enumFromInt(S.Int(u32), 0);
try std.testing.expect(@intFromEnum(i) == 0);
}
+
+test "auto-numbered enum with signed tag type" {
+ const E = enum(i32) { a, b };
+
+ try std.testing.expectEqual(@as(i32, 0), @intFromEnum(E.a));
+ try std.testing.expectEqual(@as(i32, 1), @intFromEnum(E.b));
+ try std.testing.expectEqual(E.a, @enumFromInt(E, 0));
+ try std.testing.expectEqual(E.b, @enumFromInt(E, 1));
+ try std.testing.expectEqual(E.a, @enumFromInt(E, @as(i32, 0)));
+ try std.testing.expectEqual(E.b, @enumFromInt(E, @as(i32, 1)));
+ try std.testing.expectEqual(E.a, @enumFromInt(E, @as(u32, 0)));
+ try std.testing.expectEqual(E.b, @enumFromInt(E, @as(u32, 1)));
+ try std.testing.expectEqualStrings("a", @tagName(E.a));
+ try std.testing.expectEqualStrings("b", @tagName(E.b));
+}