authorgravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2024-03-12 00:53:09+01:00
committergravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2024-03-12 00:53:09+01:00
log44cd59a3ba445f1ecf1c608302f375aede6e62dc
tree034fd7dd727b124df3872ef661d1f273d0175ca6
parent0a931393c0f1a8b4882753ad37c303268ccaa7fa

Move big enum tests to a standalone test case


3 files changed, 39 insertions(+), 42 deletions(-)

lib/std/enums.zig-42
......@@ -1454,45 +1454,3 @@ test values {
14541454 };
14551455 try testing.expectEqualSlices(E, &.{ .X, .Y, .Z }, values(E));
14561456}
1457
1458test "big enums should not hit the eval branch quota" {
1459 const big = struct {
1460 const Big = @Type(@as(std.builtin.Type, .{
1461 .Enum = .{
1462 .tag_type = u16,
1463 .fields = make_fields: {
1464 var fields: []const std.builtin.Type.EnumField = &.{};
1465 for (0..1999) |i| {
1466 fields = fields ++ &[_]std.builtin.Type.EnumField{.{
1467 .name = std.fmt.comptimePrint("field_{d}", .{i}),
1468 .value = i,
1469 }};
1470 }
1471 fields = fields ++ &[_]std.builtin.Type.EnumField{.{
1472 .name = "field_9999",
1473 .value = 9999,
1474 }};
1475 break :make_fields fields;
1476 },
1477 .decls = &.{},
1478 .is_exhaustive = true,
1479 },
1480 }));
1481 };
1482
1483 var set = EnumSet(big.Big).init(.{});
1484 _ = &set;
1485
1486 var map = EnumMap(big.Big, u8).init(undefined);
1487 map = EnumMap(big.Big, u8).initFullWith(undefined);
1488 map = EnumMap(big.Big, u8).initFullWithDefault(123, .{});
1489
1490 var multiset = EnumMultiset(big.Big).init(.{});
1491 _ = &multiset;
1492
1493 var bounded_multiset = BoundedEnumMultiset(big.Big, u8).init(.{});
1494 _ = &bounded_multiset;
1495
1496 var array = EnumArray(big.Big, u8).init(undefined);
1497 array = EnumArray(big.Big, u8).initDefault(123, .{});
1498}
test/standalone.zig+1
......@@ -49,6 +49,7 @@ pub const simple_cases = [_]SimpleCase{
4949 .{ .src_path = "test/standalone/main_return_error/error_u8_non_zero.zig" },
5050 .{ .src_path = "test/standalone/noreturn_call/inline.zig" },
5151 .{ .src_path = "test/standalone/noreturn_call/as_arg.zig" },
52 .{ .src_path = "test/standalone/std_enums_big_enums.zig" },
5253
5354 .{
5455 .src_path = "test/standalone/issue_9402/main.zig",
test/standalone/std_enums_big_enums.zig created+38
......@@ -0,0 +1,38 @@
1const std = @import("std");
2
3// big enums should not hit the eval branch quota
4pub fn main() void {
5 const big = struct {
6 const Big = @Type(@as(std.builtin.Type, .{
7 .Enum = .{
8 .tag_type = u16,
9 .fields = make_fields: {
10 var fields: [1001]std.builtin.Type.EnumField = undefined;
11 for (&fields, 0..) |*field, i| {
12 field.* = .{ .name = std.fmt.comptimePrint("field_{d}", .{i}), .value = i };
13 }
14 fields[1000] = .{ .name = "field_9999", .value = 9999 };
15 break :make_fields &fields;
16 },
17 .decls = &.{},
18 .is_exhaustive = true,
19 },
20 }));
21 };
22
23 var set = std.enums.EnumSet(big.Big).init(.{});
24 _ = &set;
25
26 var map = std.enums.EnumMap(big.Big, u8).init(undefined);
27 map = std.enums.EnumMap(big.Big, u8).initFullWith(undefined);
28 map = std.enums.EnumMap(big.Big, u8).initFullWithDefault(123, .{});
29
30 var multiset = std.enums.EnumMultiset(big.Big).init(.{});
31 _ = &multiset;
32
33 var bounded_multiset = std.enums.BoundedEnumMultiset(big.Big, u8).init(.{});
34 _ = &bounded_multiset;
35
36 var array = std.enums.EnumArray(big.Big, u8).init(undefined);
37 array = std.enums.EnumArray(big.Big, u8).initDefault(123, .{});
38}