| 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 | 40 | _ = @import("cases/this.zig"); |
| 41 | 41 | _ = @import("cases/try.zig"); |
| 42 | 42 | _ = @import("cases/undefined.zig"); |
| 43 | _ = @import("cases/union.zig"); | |
| 43 | 44 | _ = @import("cases/var_args.zig"); |
| 44 | 45 | _ = @import("cases/void.zig"); |
| 45 | 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 | } |