mirror of
https://github.com/ziglang/zig.git
synced 2024-11-30 09:02:32 +00:00
88 lines
1.8 KiB
Zig
88 lines
1.8 KiB
Zig
const expect = @import("std").testing.expect;
|
|
|
|
test "if optional" {
|
|
// If expressions test for null.
|
|
|
|
const a: ?u32 = 0;
|
|
if (a) |value| {
|
|
try expect(value == 0);
|
|
} else {
|
|
unreachable;
|
|
}
|
|
|
|
const b: ?u32 = null;
|
|
if (b) |_| {
|
|
unreachable;
|
|
} else {
|
|
try expect(true);
|
|
}
|
|
|
|
// The else is not required.
|
|
if (a) |value| {
|
|
try expect(value == 0);
|
|
}
|
|
|
|
// 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: ?u32 = 3;
|
|
if (c) |*value| {
|
|
value.* = 2;
|
|
}
|
|
|
|
if (c) |value| {
|
|
try expect(value == 2);
|
|
} else {
|
|
unreachable;
|
|
}
|
|
}
|
|
|
|
test "if error union with optional" {
|
|
// If expressions test for errors before unwrapping optionals.
|
|
// The |optional_value| capture's type is ?u32.
|
|
|
|
const a: anyerror!?u32 = 0;
|
|
if (a) |optional_value| {
|
|
try expect(optional_value.? == 0);
|
|
} else |err| {
|
|
_ = err;
|
|
unreachable;
|
|
}
|
|
|
|
const b: anyerror!?u32 = null;
|
|
if (b) |optional_value| {
|
|
try expect(optional_value == null);
|
|
} else |_| {
|
|
unreachable;
|
|
}
|
|
|
|
const c: anyerror!?u32 = error.BadValue;
|
|
if (c) |optional_value| {
|
|
_ = optional_value;
|
|
unreachable;
|
|
} else |err| {
|
|
try expect(err == error.BadValue);
|
|
}
|
|
|
|
// Access the value by reference by using a pointer capture each time.
|
|
var d: anyerror!?u32 = 3;
|
|
if (d) |*optional_value| {
|
|
if (optional_value.*) |*value| {
|
|
value.* = 9;
|
|
}
|
|
} else |_| {
|
|
unreachable;
|
|
}
|
|
|
|
if (d) |optional_value| {
|
|
try expect(optional_value.? == 9);
|
|
} else |_| {
|
|
unreachable;
|
|
}
|
|
}
|
|
|
|
// test
|