From 44cd59a3ba445f1ecf1c608302f375aede6e62dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20=C3=85stholm?= Date: Tue, 12 Mar 2024 00:53:09 +0100 Subject: [PATCH] Move big enum tests to a standalone test case --- lib/std/enums.zig | 42 ------------------------- test/standalone.zig | 1 + test/standalone/std_enums_big_enums.zig | 38 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 42 deletions(-) create mode 100644 test/standalone/std_enums_big_enums.zig diff --git a/lib/std/enums.zig b/lib/std/enums.zig index 161598e6f1..07cbc14eed 100644 --- a/lib/std/enums.zig +++ b/lib/std/enums.zig @@ -1454,45 +1454,3 @@ test values { }; try testing.expectEqualSlices(E, &.{ .X, .Y, .Z }, values(E)); } - -test "big enums should not hit the eval branch quota" { - const big = struct { - const Big = @Type(@as(std.builtin.Type, .{ - .Enum = .{ - .tag_type = u16, - .fields = make_fields: { - var fields: []const std.builtin.Type.EnumField = &.{}; - for (0..1999) |i| { - fields = fields ++ &[_]std.builtin.Type.EnumField{.{ - .name = std.fmt.comptimePrint("field_{d}", .{i}), - .value = i, - }}; - } - fields = fields ++ &[_]std.builtin.Type.EnumField{.{ - .name = "field_9999", - .value = 9999, - }}; - break :make_fields fields; - }, - .decls = &.{}, - .is_exhaustive = true, - }, - })); - }; - - var set = EnumSet(big.Big).init(.{}); - _ = &set; - - var map = EnumMap(big.Big, u8).init(undefined); - map = EnumMap(big.Big, u8).initFullWith(undefined); - map = EnumMap(big.Big, u8).initFullWithDefault(123, .{}); - - var multiset = EnumMultiset(big.Big).init(.{}); - _ = &multiset; - - var bounded_multiset = BoundedEnumMultiset(big.Big, u8).init(.{}); - _ = &bounded_multiset; - - var array = EnumArray(big.Big, u8).init(undefined); - array = EnumArray(big.Big, u8).initDefault(123, .{}); -} diff --git a/test/standalone.zig b/test/standalone.zig index e72deb38ae..c8158364e2 100644 --- a/test/standalone.zig +++ b/test/standalone.zig @@ -49,6 +49,7 @@ pub const simple_cases = [_]SimpleCase{ .{ .src_path = "test/standalone/main_return_error/error_u8_non_zero.zig" }, .{ .src_path = "test/standalone/noreturn_call/inline.zig" }, .{ .src_path = "test/standalone/noreturn_call/as_arg.zig" }, + .{ .src_path = "test/standalone/std_enums_big_enums.zig" }, .{ .src_path = "test/standalone/issue_9402/main.zig", diff --git a/test/standalone/std_enums_big_enums.zig b/test/standalone/std_enums_big_enums.zig new file mode 100644 index 0000000000..76237d3447 --- /dev/null +++ b/test/standalone/std_enums_big_enums.zig @@ -0,0 +1,38 @@ +const std = @import("std"); + +// big enums should not hit the eval branch quota +pub fn main() void { + const big = struct { + const Big = @Type(@as(std.builtin.Type, .{ + .Enum = .{ + .tag_type = u16, + .fields = make_fields: { + var fields: [1001]std.builtin.Type.EnumField = undefined; + for (&fields, 0..) |*field, i| { + field.* = .{ .name = std.fmt.comptimePrint("field_{d}", .{i}), .value = i }; + } + fields[1000] = .{ .name = "field_9999", .value = 9999 }; + break :make_fields &fields; + }, + .decls = &.{}, + .is_exhaustive = true, + }, + })); + }; + + var set = std.enums.EnumSet(big.Big).init(.{}); + _ = &set; + + var map = std.enums.EnumMap(big.Big, u8).init(undefined); + map = std.enums.EnumMap(big.Big, u8).initFullWith(undefined); + map = std.enums.EnumMap(big.Big, u8).initFullWithDefault(123, .{}); + + var multiset = std.enums.EnumMultiset(big.Big).init(.{}); + _ = &multiset; + + var bounded_multiset = std.enums.BoundedEnumMultiset(big.Big, u8).init(.{}); + _ = &bounded_multiset; + + var array = std.enums.EnumArray(big.Big, u8).init(undefined); + array = std.enums.EnumArray(big.Big, u8).initDefault(123, .{}); +}