test_union_method.zig (648B) - Raw
1 const std = @import("std"); 2 const expect = std.testing.expect; 3 4 const Variant = union(enum) { 5 int: i32, 6 boolean: bool, 7 8 // void can be omitted when inferring enum tag type. 9 none, 10 11 fn truthy(self: Variant) bool { 12 return switch (self) { 13 Variant.int => |x_int| x_int != 0, 14 Variant.boolean => |x_bool| x_bool, 15 Variant.none => false, 16 }; 17 } 18 }; 19 20 test "union method" { 21 var v1: Variant = .{ .int = 1 }; 22 var v2: Variant = .{ .boolean = false }; 23 var v3: Variant = .none; 24 25 try expect(v1.truthy()); 26 try expect(!v2.truthy()); 27 try expect(!v3.truthy()); 28 } 29 30 // test