aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/while.zig
diff options
context:
space:
mode:
Diffstat (limited to 'test/behavior/while.zig')
-rw-r--r--test/behavior/while.zig188
1 files changed, 9 insertions, 179 deletions
diff --git a/test/behavior/while.zig b/test/behavior/while.zig
index e52adfdbcf..a2f34d54c0 100644
--- a/test/behavior/while.zig
+++ b/test/behavior/while.zig
@@ -23,7 +23,7 @@ test "static eval while" {
}
const static_eval_while_number = staticWhileLoop1();
fn staticWhileLoop1() i32 {
- return whileLoop2();
+ return staticWhileLoop2();
}
fn staticWhileLoop2() i32 {
while (true) {
@@ -31,33 +31,6 @@ fn staticWhileLoop2() i32 {
}
}
-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 "return with implicit cast from while loop" {
- returnWithImplicitCastFromWhileLoopTest() catch unreachable;
-}
-fn returnWithImplicitCastFromWhileLoopTest() anyerror!void {
- while (true) {
- return;
- }
-}
-
test "while with continue expression" {
var sum: i32 = 0;
{
@@ -83,43 +56,6 @@ test "while with else" {
try expect(got_else == 1);
}
-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 with error union condition" {
- numbers_left = 10;
- var sum: i32 = 0;
- var got_else: i32 = 0;
- while (getNumberOrErr()) |value| {
- sum += value;
- } else |err| {
- try expect(err == error.OutOfNumbers);
- got_else += 1;
- }
- try expect(sum == 45);
- try expect(got_else == 1);
-}
-
var numbers_left: i32 = undefined;
fn getNumberOrErr() anyerror!i32 {
return if (numbers_left == 0) error.OutOfNumbers else x: {
@@ -134,61 +70,6 @@ fn getNumberOrNull() ?i32 {
};
}
-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);
-}
-
-test "while on error union with else result follow else prong" {
- const result = while (returnError()) |value| {
- break value;
- } else |_| @as(i32, 2);
- try expect(result == 2);
-}
-
-test "while on error union with else result follow break prong" {
- const result = while (returnSuccess(10)) |value| {
- break value;
- } else |_| @as(i32, 2);
- try expect(result == 10);
-}
-
-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 "break from outer while loop" {
- testBreakOuter();
- comptime testBreakOuter();
-}
-
-fn testBreakOuter() void {
- outer: while (true) {
- while (true) {
- break :outer;
- }
- }
-}
-
test "continue outer while loop" {
testContinueOuter();
comptime testContinueOuter();
@@ -203,68 +84,17 @@ fn testContinueOuter() void {
}
}
-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;
-}
-
-test "while bool 2 break statements and an else" {
- const S = struct {
- fn entry(t: bool, f: bool) !void {
- var ok = false;
- ok = while (t) {
- if (f) break false;
- if (t) break true;
- } else false;
- try expect(ok);
- }
- };
- try S.entry(true, false);
- comptime try S.entry(true, false);
-}
-
-test "while optional 2 break statements and an else" {
- const S = struct {
- fn entry(opt_t: ?bool, f: bool) !void {
- var ok = false;
- ok = while (opt_t) |t| {
- if (f) break false;
- if (t) break true;
- } else false;
- try expect(ok);
- }
- };
- try S.entry(true, false);
- comptime try S.entry(true, false);
+test "break from outer while loop" {
+ testBreakOuter();
+ comptime testBreakOuter();
}
-test "while error 2 break statements and an else" {
- const S = struct {
- fn entry(opt_t: anyerror!bool, f: bool) !void {
- var ok = false;
- ok = while (opt_t) |t| {
- if (f) break false;
- if (t) break true;
- } else |_| false;
- try expect(ok);
+fn testBreakOuter() void {
+ outer: while (true) {
+ while (true) {
+ break :outer;
}
- };
- try S.entry(true, false);
- comptime try S.entry(true, false);
+ }
}
test "while copies its payload" {