zig

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

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