diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-14 22:16:26 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-10-14 22:16:26 -0700 |
| commit | cacd5366a6707cb030e212ea3cc46052168d4006 (patch) | |
| tree | 8e6d5d7c40bb763acd180040af8396d4198cbe92 /test/behavior/while.zig | |
| parent | 55eea3b045c86c78eb8d9cc862122d260352a631 (diff) | |
| download | zig-cacd5366a6707cb030e212ea3cc46052168d4006.tar.gz zig-cacd5366a6707cb030e212ea3cc46052168d4006.zip | |
stage2: LLVM backend: implement `wrap_optional` AIR
and move over some passing tests
Diffstat (limited to 'test/behavior/while.zig')
| -rw-r--r-- | test/behavior/while.zig | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/test/behavior/while.zig b/test/behavior/while.zig index a2f34d54c0..9e9ac5dc01 100644 --- a/test/behavior/while.zig +++ b/test/behavior/while.zig @@ -111,3 +111,91 @@ test "while copies its payload" { try S.doTheTest(); comptime try S.doTheTest(); } + +test "continue and break" { + try runContinueAndBreakTest(); + try expect(continue_and_break_counter == 8); +} +var continue_and_break_counter: i32 = 0; +fn runContinueAndBreakTest() !void { + var i: i32 = 0; + while (true) { + continue_and_break_counter += 2; + i += 1; + if (i < 4) { + continue; + } + break; + } + try expect(i == 4); +} + +test "while with optional as condition" { + numbers_left = 10; + var sum: i32 = 0; + while (getNumberOrNull()) |value| { + sum += value; + } + try expect(sum == 45); +} + +test "while with optional as condition with else" { + numbers_left = 10; + var sum: i32 = 0; + var got_else: i32 = 0; + while (getNumberOrNull()) |value| { + sum += value; + try expect(got_else == 0); + } else { + got_else += 1; + } + try expect(sum == 45); + try expect(got_else == 1); +} + +test "while on bool with else result follow else prong" { + const result = while (returnFalse()) { + break @as(i32, 10); + } else @as(i32, 2); + try expect(result == 2); +} + +test "while on bool with else result follow break prong" { + const result = while (returnTrue()) { + break @as(i32, 10); + } else @as(i32, 2); + try expect(result == 10); +} + +test "while on optional with else result follow else prong" { + const result = while (returnNull()) |value| { + break value; + } else @as(i32, 2); + try expect(result == 2); +} + +test "while on optional with else result follow break prong" { + const result = while (returnOptional(10)) |value| { + break value; + } else @as(i32, 2); + try expect(result == 10); +} + +fn returnNull() ?i32 { + return null; +} +fn returnOptional(x: i32) ?i32 { + return x; +} +fn returnError() anyerror!i32 { + return error.YouWantedAnError; +} +fn returnSuccess(x: i32) anyerror!i32 { + return x; +} +fn returnFalse() bool { + return false; +} +fn returnTrue() bool { + return true; +} |
