test_if.zig (1598B) - Raw
1 // If expressions have three uses, corresponding to the three types: 2 // * bool 3 // * ?T 4 // * anyerror!T 5 6 const expect = @import("std").testing.expect; 7 8 test "if expression" { 9 // If expressions are used instead of a ternary expression. 10 const a: u32 = 5; 11 const b: u32 = 4; 12 const result = if (a != b) 47 else 3089; 13 try expect(result == 47); 14 } 15 16 test "if boolean" { 17 // If expressions test boolean conditions. 18 const a: u32 = 5; 19 const b: u32 = 4; 20 if (a != b) { 21 try expect(true); 22 } else if (a == 9) { 23 unreachable; 24 } else { 25 unreachable; 26 } 27 } 28 29 test "if error union" { 30 // If expressions test for errors. 31 // Note the |err| capture on the else. 32 33 const a: anyerror!u32 = 0; 34 if (a) |value| { 35 try expect(value == 0); 36 } else |err| { 37 _ = err; 38 unreachable; 39 } 40 41 const b: anyerror!u32 = error.BadValue; 42 if (b) |value| { 43 _ = value; 44 unreachable; 45 } else |err| { 46 try expect(err == error.BadValue); 47 } 48 49 // The else and |err| capture is strictly required. 50 if (a) |value| { 51 try expect(value == 0); 52 } else |_| {} 53 54 // To check only the error value, use an empty block expression. 55 if (b) |_| {} else |err| { 56 try expect(err == error.BadValue); 57 } 58 59 // Access the value by reference using a pointer capture. 60 var c: anyerror!u32 = 3; 61 if (c) |*value| { 62 value.* = 9; 63 } else |_| { 64 unreachable; 65 } 66 67 if (c) |value| { 68 try expect(value == 9); 69 } else |_| { 70 unreachable; 71 } 72 } 73 74 // test