enums.zig

Working version(s):
0.13.00.14.1

Failing version(s):
0.15.20.16.0-dev.2637+6a9510c0e

Code

const std = @import("std");

test "basic enum" {
    const Status = enum {
        ok,
        bad_request,
        unauthorized,
        not_found,
        internal_server_error,
    };
    _ = Status.ok;
}

test "basic enum with tag type" {
    const Status = enum(u10) {
        ok,
        bad_request,
        unauthorized,
        not_found,
        internal_server_error,
    };
    try std.testing.expectEqual(0, @intFromEnum(Status.ok));
    try std.testing.expectEqual(1, @intFromEnum(Status.bad_request));
    try std.testing.expectEqual(2, @intFromEnum(Status.unauthorized));
    try std.testing.expectEqual(3, @intFromEnum(Status.not_found));
    try std.testing.expectEqual(4, @intFromEnum(Status.internal_server_error));
}

test "overriden ordinal values" {
    const Status = enum(u10) {
        ok = 200,
        bad_request = 400,
        unauthorized = 401,
        not_found = 404,
        internal_server_error = 500,
    };
    try std.testing.expectEqual(200, @intFromEnum(Status.ok));
    try std.testing.expectEqual(400, @intFromEnum(Status.bad_request));
    try std.testing.expectEqual(401, @intFromEnum(Status.unauthorized));
    try std.testing.expectEqual(404, @intFromEnum(Status.not_found));
    try std.testing.expectEqual(500, @intFromEnum(Status.internal_server_error));
}