Add break continue
This commit is contained in:
@@ -148,3 +148,72 @@ TEST_CASE("interpreter performance: simple loop", "[perf][script]") {
|
||||
REQUIRE(r_num->value == 499500.0);
|
||||
};
|
||||
}
|
||||
|
||||
TEST_CASE("loop break", "[script][loop]") {
|
||||
State state;
|
||||
const char* script = R"(
|
||||
number sum = 0;
|
||||
for (number i = 0; i < 10; i = i + 1) {
|
||||
if (i == 5) {
|
||||
break;
|
||||
}
|
||||
sum = sum + i;
|
||||
}
|
||||
)";
|
||||
|
||||
REQUIRE(state.do_string(script));
|
||||
auto sum_val = state.get_global("sum");
|
||||
REQUIRE(sum_val);
|
||||
auto sum_num = std::dynamic_pointer_cast<NumberValue>(sum_val);
|
||||
REQUIRE(sum_num->value == 10.0); // 0+1+2+3+4 = 10
|
||||
}
|
||||
|
||||
TEST_CASE("loop continue", "[script][loop]") {
|
||||
State state;
|
||||
const char* script = R"(
|
||||
number sum = 0;
|
||||
for (number i = 0; i < 5; i = i + 1) {
|
||||
if (i == 2) {
|
||||
continue;
|
||||
}
|
||||
sum = sum + i;
|
||||
}
|
||||
)";
|
||||
|
||||
REQUIRE(state.do_string(script));
|
||||
auto sum_val = state.get_global("sum");
|
||||
REQUIRE(sum_val);
|
||||
auto sum_num = std::dynamic_pointer_cast<NumberValue>(sum_val);
|
||||
REQUIRE(sum_num->value == 8.0); // 0+1+3+4 = 8
|
||||
}
|
||||
|
||||
TEST_CASE("while break and continue", "[script][loop]") {
|
||||
State state;
|
||||
const char* script = R"(
|
||||
number i = 0;
|
||||
number sum = 0;
|
||||
while (i < 10) {
|
||||
i = i + 1;
|
||||
if (i == 3) {
|
||||
continue;
|
||||
}
|
||||
if (i == 6) {
|
||||
break;
|
||||
}
|
||||
sum = sum + i;
|
||||
}
|
||||
)";
|
||||
|
||||
REQUIRE(state.do_string(script));
|
||||
auto sum_val = state.get_global("sum");
|
||||
REQUIRE(sum_val);
|
||||
auto sum_num = std::dynamic_pointer_cast<NumberValue>(sum_val);
|
||||
REQUIRE(sum_num->value == 12.0);
|
||||
// 1st iter: i=1, sum=1
|
||||
// 2nd iter: i=2, sum=1+2=3
|
||||
// 3rd iter: i=3, continue
|
||||
// 4th iter: i=4, sum=3+4=7
|
||||
// 5th iter: i=5, sum=7+5=12
|
||||
// 6th iter: i=6, break
|
||||
// Result should be 12.0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user