mirror of
https://github.com/ziglang/zig.git
synced 2024-11-30 17:12:31 +00:00
d884d7050e
Signed-off-by: Eric Joldasov <bratishkaerik@getgoogleoff.me>
53 lines
1.3 KiB
Zig
53 lines
1.3 KiB
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
const expect = std.testing.expect;
|
|
|
|
test "try on error union" {
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
try tryOnErrorUnionImpl();
|
|
try comptime tryOnErrorUnionImpl();
|
|
}
|
|
|
|
fn tryOnErrorUnionImpl() !void {
|
|
const x = if (returnsTen()) |val| val + 1 else |err| switch (err) {
|
|
error.ItBroke, error.NoMem => 1,
|
|
error.CrappedOut => @as(i32, 2),
|
|
else => unreachable,
|
|
};
|
|
try expect(x == 11);
|
|
}
|
|
|
|
fn returnsTen() anyerror!i32 {
|
|
return 10;
|
|
}
|
|
|
|
test "try without vars" {
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
const result1 = if (failIfTrue(true)) 1 else |_| @as(i32, 2);
|
|
try expect(result1 == 2);
|
|
|
|
const result2 = if (failIfTrue(false)) 1 else |_| @as(i32, 2);
|
|
try expect(result2 == 1);
|
|
}
|
|
|
|
fn failIfTrue(ok: bool) anyerror!void {
|
|
if (ok) {
|
|
return error.ItBroke;
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
|
|
test "try then not executed with assignment" {
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
if (failIfTrue(true)) {
|
|
unreachable;
|
|
} else |err| {
|
|
try expect(err == error.ItBroke);
|
|
}
|
|
}
|