| author | |
| committer | |
| log | 4c306af4eb79071c966b99e877970f0a4582d891 |
| tree | cd95da12c74609d1236ef64ac334c00e74358868 |
| parent | f1072d0d9fba397b3920015fd854414868e6ea17 |
2 files changed, 34 insertions(+), 0 deletions(-)
test/behavior.zig+1| ... | @@ -40,6 +40,7 @@ comptime { | ... | @@ -40,6 +40,7 @@ comptime { |
| 40 | _ = @import("cases/this.zig"); | 40 | _ = @import("cases/this.zig"); |
| 41 | _ = @import("cases/try.zig"); | 41 | _ = @import("cases/try.zig"); |
| 42 | _ = @import("cases/undefined.zig"); | 42 | _ = @import("cases/undefined.zig"); |
| 43 | _ = @import("cases/union.zig"); | ||
| 43 | _ = @import("cases/var_args.zig"); | 44 | _ = @import("cases/var_args.zig"); |
| 44 | _ = @import("cases/void.zig"); | 45 | _ = @import("cases/void.zig"); |
| 45 | _ = @import("cases/while.zig"); | 46 | _ = @import("cases/while.zig"); |
test/cases/union.zig created+33| ... | @@ -0,0 +1,33 @@ | ||
| 1 | const assert = @import("std").debug.assert; | ||
| 2 | |||
| 3 | const Value = enum { | ||
| 4 | Int: u64, | ||
| 5 | Array: [9]u8, | ||
| 6 | }; | ||
| 7 | |||
| 8 | const Agg = struct { | ||
| 9 | val1: Value, | ||
| 10 | val2: Value, | ||
| 11 | }; | ||
| 12 | |||
| 13 | const v1 = Value.Int { 1234 }; | ||
| 14 | const v2 = Value.Array { []u8{3} ** 9 }; | ||
| 15 | |||
| 16 | const err = (%Agg)(Agg { | ||
| 17 | .val1 = v1, | ||
| 18 | .val2 = v2, | ||
| 19 | }); | ||
| 20 | |||
| 21 | const array = []Value { v1, v2, v1, v2}; | ||
| 22 | |||
| 23 | |||
| 24 | test "unions embedded in aggregate types" { | ||
| 25 | switch (array[1]) { | ||
| 26 | Value.Array => |arr| assert(arr[4] == 3), | ||
| 27 | else => unreachable, | ||
| 28 | } | ||
| 29 | switch((%%err).val1) { | ||
| 30 | Value.Int => |x| assert(x == 1234), | ||
| 31 | else => unreachable, | ||
| 32 | } | ||
| 33 | } | ||