diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-06-20 11:40:14 -0400 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-06-20 20:09:28 -0700 |
| commit | 8875efe54873b721cc3a6f6d83525b19d1c59ec3 (patch) | |
| tree | cfc48f81d16e591f69bd99a1c7184ebbc1480209 /test/behavior/enum.zig | |
| parent | 3267eb3a28f6c747772a40beedac14f5feae814f (diff) | |
| download | zig-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.zig | 20 |
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)); +} |
