test_if_optionals.zig (1836B) - Raw
1 const expect = @import("std").testing.expect; 2 3 test "if optional" { 4 // If expressions test for null. 5 6 const a: ?u32 = 0; 7 if (a) |value| { 8 try expect(value == 0); 9 } else { 10 unreachable; 11 } 12 13 const b: ?u32 = null; 14 if (b) |_| { 15 unreachable; 16 } else { 17 try expect(true); 18 } 19 20 // The else is not required. 21 if (a) |value| { 22 try expect(value == 0); 23 } 24 25 // To test against null only, use the binary equality operator. 26 if (b == null) { 27 try expect(true); 28 } 29 30 // Access the value by reference using a pointer capture. 31 var c: ?u32 = 3; 32 if (c) |*value| { 33 value.* = 2; 34 } 35 36 if (c) |value| { 37 try expect(value == 2); 38 } else { 39 unreachable; 40 } 41 } 42 43 test "if error union with optional" { 44 // If expressions test for errors before unwrapping optionals. 45 // The |optional_value| capture's type is ?u32. 46 47 const a: anyerror!?u32 = 0; 48 if (a) |optional_value| { 49 try expect(optional_value.? == 0); 50 } else |err| { 51 _ = err; 52 unreachable; 53 } 54 55 const b: anyerror!?u32 = null; 56 if (b) |optional_value| { 57 try expect(optional_value == null); 58 } else |_| { 59 unreachable; 60 } 61 62 const c: anyerror!?u32 = error.BadValue; 63 if (c) |optional_value| { 64 _ = optional_value; 65 unreachable; 66 } else |err| { 67 try expect(err == error.BadValue); 68 } 69 70 // Access the value by reference by using a pointer capture each time. 71 var d: anyerror!?u32 = 3; 72 if (d) |*optional_value| { 73 if (optional_value.*) |*value| { 74 value.* = 9; 75 } 76 } else |_| { 77 unreachable; 78 } 79 80 if (d) |optional_value| { 81 try expect(optional_value.? == 9); 82 } else |_| { 83 unreachable; 84 } 85 } 86 87 // test