Commit ef93a36cd5

Gordon Cassie <gordoncassie@gmail.com>
2023-12-07 22:51:03
Add comment. Split up if docs for optionals.
1 parent cce820f
Changed files (1)
doc/langref.html.in
@@ -4628,6 +4628,7 @@ test "while null capture" {
     }
     try expect(sum1 == 3);
 
+    // null capture with an else block
     var sum2: u32 = 0;
     numbers_left = 3;
     while (eventuallyNullSequence()) |value| {
@@ -4636,6 +4637,7 @@ test "while null capture" {
         try expect(sum2 == 3);
     }
 
+    // null capture with a continue expression
     var i: u32 = 0;
     var sum3: u32 = 0;
     numbers_left = 3;
@@ -4923,87 +4925,92 @@ test "if boolean" {
     }
 }
 
-test "if optional" {
-    // If expressions test for null.
+test "if error union" {
+    // If expressions test for errors.
+    // Note the |err| capture on the else.
 
-    const a: ?u32 = 0;
+    const a: anyerror!u32 = 0;
     if (a) |value| {
         try expect(value == 0);
-    } else {
+    } else |err| {
+        _ = err;
         unreachable;
     }
 
-    const b: ?u32 = null;
-    if (b) |_| {
+    const b: anyerror!u32 = error.BadValue;
+    if (b) |value| {
+        _ = value;
         unreachable;
-    } else {
-        try expect(true);
+    } else |err| {
+        try expect(err == error.BadValue);
     }
 
-    // The else is not required.
+    // The else and |err| capture is strictly required.
     if (a) |value| {
         try expect(value == 0);
-    }
+    } else |_| {}
 
-    // To test against null only, use the binary equality operator.
-    if (b == null) {
-        try expect(true);
+    // To check only the error value, use an empty block expression.
+    if (b) |_| {} else |err| {
+        try expect(err == error.BadValue);
     }
 
     // Access the value by reference using a pointer capture.
-    var c: ?u32 = 3;
+    var c: anyerror!u32 = 3;
     if (c) |*value| {
-        value.* = 2;
+        value.* = 9;
+    } else |_| {
+        unreachable;
     }
 
     if (c) |value| {
-        try expect(value == 2);
-    } else {
+        try expect(value == 9);
+    } else |_| {
         unreachable;
     }
 }
+      {#code_end#}
+      {#header_open|if with Optionals#}
 
-test "if error union" {
-    // If expressions test for errors.
-    // Note the |err| capture on the else.
+      {#code_begin|test|test_if_optionals#}
+const expect = @import("std").testing.expect;
 
-    const a: anyerror!u32 = 0;
+test "if optional" {
+    // If expressions test for null.
+
+    const a: ?u32 = 0;
     if (a) |value| {
         try expect(value == 0);
-    } else |err| {
-        _ = err;
+    } else {
         unreachable;
     }
 
-    const b: anyerror!u32 = error.BadValue;
-    if (b) |value| {
-        _ = value;
+    const b: ?u32 = null;
+    if (b) |_| {
         unreachable;
-    } else |err| {
-        try expect(err == error.BadValue);
+    } else {
+        try expect(true);
     }
 
-    // The else and |err| capture is strictly required.
+    // The else is not required.
     if (a) |value| {
         try expect(value == 0);
-    } else |_| {}
+    }
 
-    // To check only the error value, use an empty block expression.
-    if (b) |_| {} else |err| {
-        try expect(err == error.BadValue);
+    // 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: anyerror!u32 = 3;
+    var c: ?u32 = 3;
     if (c) |*value| {
-        value.* = 9;
-    } else |_| {
-        unreachable;
+        value.* = 2;
     }
 
     if (c) |value| {
-        try expect(value == 9);
-    } else |_| {
+        try expect(value == 2);
+    } else {
         unreachable;
     }
 }
@@ -5052,6 +5059,7 @@ test "if error union with optional" {
     }
 }
       {#code_end#}
+      {#header_close#}
       {#see_also|Optionals|Errors#}
       {#header_close#}
       {#header_open|defer#}
@@ -6338,7 +6346,7 @@ test "optional pointers" {
       {#code_end#}
       {#header_close#}
 
-      {#see_also|while with Optionals|if#}
+      {#see_also|while with Optionals|if with Optionals#}
       {#header_close#}
       {#header_open|Casting#}
       <p>