zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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