zig/test/cases3/enum.zig

53 lines
842 B
Zig

fn enumType() {
@setFnTest(this);
const foo1 = Foo.One {13};
const foo2 = Foo.Two { Point { .x = 1234, .y = 5678, }};
const bar = Bar.B;
assert(bar == Bar.B);
assert(@memberCount(Foo) == 3);
assert(@memberCount(Bar) == 4);
const expected_foo_size = 16 + @sizeOf(usize);
assert(@sizeOf(Foo) == expected_foo_size);
assert(@sizeOf(Bar) == 1);
}
fn enumAsReturnValue () {
@setFnTest(this);
switch (returnAnInt(13)) {
Foo.One => |value| assert(value == 13),
else => @unreachable(),
}
}
const Point = struct {
x: u64,
y: u64,
};
const Foo = enum {
One: i32,
Two: Point,
Three: void,
};
const Bar = enum {
A,
B,
C,
D,
};
fn returnAnInt(x: i32) -> Foo {
Foo.One { x }
}
fn assert(ok: bool) {
if (!ok)
@unreachable();
}