const expect = @import("std").testing.expect; test "if optional" { // If expressions test for null. const a: ?u32 = 0; if (a) |value| { try expect(value == 0); } else { unreachable; } const b: ?u32 = null; if (b) |_| { unreachable; } else { try expect(true); } // The else is not required. if (a) |value| { try expect(value == 0); } // To test against null only, use the binary equality operator. if (b == null) { try expect(true); } // Access the value by reference using a pointer capture. var c: ?u32 = 3; if (c) |*value| { value.* = 2; } if (c) |value| { try expect(value == 2); } else { unreachable; } } test "if error union with optional" { // If expressions test for errors before unwrapping optionals. // The |optional_value| capture's type is ?u32. const a: anyerror!?u32 = 0; if (a) |optional_value| { try expect(optional_value.? == 0); } else |err| { _ = err; unreachable; } const b: anyerror!?u32 = null; if (b) |optional_value| { try expect(optional_value == null); } else |_| { unreachable; } const c: anyerror!?u32 = error.BadValue; if (c) |optional_value| { _ = optional_value; unreachable; } else |err| { try expect(err == error.BadValue); } // Access the value by reference by using a pointer capture each time. var d: anyerror!?u32 = 3; if (d) |*optional_value| { if (optional_value.*) |*value| { value.* = 9; } } else |_| { unreachable; } if (d) |optional_value| { try expect(optional_value.? == 9); } else |_| { unreachable; } } // test