diff --git a/test/behavior.zig b/test/behavior.zig index 54c954be3d..952c725e8c 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -40,6 +40,7 @@ comptime { _ = @import("cases/this.zig"); _ = @import("cases/try.zig"); _ = @import("cases/undefined.zig"); + _ = @import("cases/union.zig"); _ = @import("cases/var_args.zig"); _ = @import("cases/void.zig"); _ = @import("cases/while.zig"); diff --git a/test/cases/union.zig b/test/cases/union.zig new file mode 100644 index 0000000000..4b8ccb7245 --- /dev/null +++ b/test/cases/union.zig @@ -0,0 +1,33 @@ +const assert = @import("std").debug.assert; + +const Value = enum { + Int: u64, + Array: [9]u8, +}; + +const Agg = struct { + val1: Value, + val2: Value, +}; + +const v1 = Value.Int { 1234 }; +const v2 = Value.Array { []u8{3} ** 9 }; + +const err = (%Agg)(Agg { + .val1 = v1, + .val2 = v2, +}); + +const array = []Value { v1, v2, v1, v2}; + + +test "unions embedded in aggregate types" { + switch (array[1]) { + Value.Array => |arr| assert(arr[4] == 3), + else => unreachable, + } + switch((%%err).val1) { + Value.Int => |x| assert(x == 1234), + else => unreachable, + } +}