diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-02-26 11:21:30 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-02-26 11:21:30 -0500 |
| commit | 6291e8e4926c2e7dbd5cfa651f862c7dbd2e5bda (patch) | |
| tree | c30178b457a4afcca39e355da12502f2c6216a7f /test | |
| parent | c4a2734aa08a9e810680d7be2c976fe3ae67cc5b (diff) | |
| parent | 62de32a18c1eecedc29055e4199fa364f9e9b7c6 (diff) | |
| download | zig-6291e8e4926c2e7dbd5cfa651f862c7dbd2e5bda.tar.gz zig-6291e8e4926c2e7dbd5cfa651f862c7dbd2e5bda.zip | |
Merge branch 'Vexu-tagname'
closes #4559
closes #3991
Diffstat (limited to 'test')
| -rw-r--r-- | test/compile_errors.zig | 9 | ||||
| -rw-r--r-- | test/stage1/behavior/cast.zig | 11 | ||||
| -rw-r--r-- | test/stage1/behavior/enum.zig | 23 |
3 files changed, 42 insertions, 1 deletions
diff --git a/test/compile_errors.zig b/test/compile_errors.zig index 138f7a7633..0260160dca 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -3,6 +3,15 @@ const builtin = @import("builtin"); const Target = @import("std").Target; pub fn addCases(cases: *tests.CompileErrorContext) void { + cases.addTest("@tagName on invalid value of non-exhaustive enum", + \\test "enum" { + \\ const E = enum(u8) {A, B, _}; + \\ _ = @tagName(@intToEnum(E, 5)); + \\} + , &[_][]const u8{ + "tmp.zig:3:18: error: no tag by value 5", + }); + cases.addTest("@ptrToInt with pointer to zero-sized type", \\export fn entry() void { \\ var pointer: ?*u0 = null; diff --git a/test/stage1/behavior/cast.zig b/test/stage1/behavior/cast.zig index 76d3b784ec..d2267a3753 100644 --- a/test/stage1/behavior/cast.zig +++ b/test/stage1/behavior/cast.zig @@ -491,6 +491,17 @@ test "@intToEnum passed a comptime_int to an enum with one item" { expect(x == E.A); } +test "@intToEnum runtime to an extern enum with duplicate values" { + const E = extern enum(u8) { + A = 1, + B = 1, + }; + var a: u8 = 1; + var x = @intToEnum(E, a); + expect(x == E.A); + expect(x == E.B); +} + test "@intCast to u0 and use the result" { const S = struct { fn doTheTest(zero: u1, one: u1, bigzero: i32) void { diff --git a/test/stage1/behavior/enum.zig b/test/stage1/behavior/enum.zig index 18489ba24b..b6cb86a363 100644 --- a/test/stage1/behavior/enum.zig +++ b/test/stage1/behavior/enum.zig @@ -198,7 +198,17 @@ test "@tagName" { comptime expect(mem.eql(u8, testEnumTagNameBare(BareNumber.Three), "Three")); } -fn testEnumTagNameBare(n: BareNumber) []const u8 { +test "@tagName extern enum with duplicates" { + expect(mem.eql(u8, testEnumTagNameBare(ExternDuplicates.B), "A")); + comptime expect(mem.eql(u8, testEnumTagNameBare(ExternDuplicates.B), "A")); +} + +test "@tagName non-exhaustive enum" { + expect(mem.eql(u8, testEnumTagNameBare(NonExhaustive.B), "B")); + comptime expect(mem.eql(u8, testEnumTagNameBare(NonExhaustive.B), "B")); +} + +fn testEnumTagNameBare(n: var) []const u8 { return @tagName(n); } @@ -208,6 +218,17 @@ const BareNumber = enum { Three, }; +const ExternDuplicates = extern enum(u8) { + A = 1, + B = 1, +}; + +const NonExhaustive = enum(u8) { + A, + B, + _, +}; + test "enum alignment" { comptime { expect(@alignOf(AlignTestEnum) >= @alignOf([9]u8)); |
