mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Keywords 'break' & 'continue' tested
There were a couple bugs - I'm glad I'm so thorough with these tests. See #152
This commit is contained in:
@@ -1,48 +1,100 @@
|
|||||||
|
//make sure it works with multiple repititions
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//test break
|
||||||
while (true) {
|
while (true) {
|
||||||
print "1";
|
|
||||||
break;
|
break;
|
||||||
print "2";
|
assert false, "break failed";
|
||||||
}
|
}
|
||||||
|
|
||||||
print "3";
|
//test continue
|
||||||
|
var flag1: bool = true;
|
||||||
|
while (flag1) {
|
||||||
|
flag1 = false;
|
||||||
while (true) {
|
continue;
|
||||||
print 1;
|
assert false, "continue failed";
|
||||||
while (true) {
|
|
||||||
print 2;
|
|
||||||
if (true) {
|
|
||||||
print 3;
|
|
||||||
while (true) {
|
|
||||||
print 4;
|
|
||||||
break;
|
|
||||||
print 5;
|
|
||||||
}
|
|
||||||
print 6;
|
|
||||||
}
|
|
||||||
print 7;
|
|
||||||
}
|
|
||||||
print 8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print 9;
|
print "done";
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//test break
|
||||||
while (true) {
|
while (true) {
|
||||||
print 1;
|
|
||||||
while (true) {
|
|
||||||
print 2;
|
|
||||||
if (true) {
|
|
||||||
print 3;
|
|
||||||
break;
|
break;
|
||||||
print 6;
|
assert false, "break failed";
|
||||||
}
|
}
|
||||||
print 7;
|
|
||||||
}
|
//test continue
|
||||||
print 8;
|
var flag2: bool = true;
|
||||||
|
while (flag2) {
|
||||||
|
flag2 = false;
|
||||||
|
continue;
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
break;
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag3: bool = true;
|
||||||
|
while (flag3) {
|
||||||
|
flag3 = false;
|
||||||
|
continue;
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
{
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
break;
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag4: bool = true;
|
||||||
|
while (flag4) {
|
||||||
|
flag4 = false;
|
||||||
|
continue;
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
{
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag5: bool = true;
|
||||||
|
while (flag5) {
|
||||||
|
flag5 = false;
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
}
|
}
|
||||||
|
|
||||||
print 9;
|
|
||||||
@@ -508,7 +508,7 @@ static unsigned int writeInstructionWhileThen(Toy_Routine** rt, Toy_AstWhileThen
|
|||||||
|
|
||||||
unsigned int diff = depth - (*rt)->currentScopeDepth;
|
unsigned int diff = depth - (*rt)->currentScopeDepth;
|
||||||
|
|
||||||
OVERWRITE_INT(rt, code, addr, addr - (CURRENT_ADDRESS(rt, code) + 8)); //tell continue to return to the start AFTER reading the instruction
|
OVERWRITE_INT(rt, code, addr, CURRENT_ADDRESS(rt, code) - (addr + 8)); //tell continue to return to the start AFTER reading the instruction
|
||||||
OVERWRITE_INT(rt, code, addr, diff);
|
OVERWRITE_INT(rt, code, addr, diff);
|
||||||
|
|
||||||
//tick down
|
//tick down
|
||||||
|
|||||||
@@ -581,6 +581,7 @@ static void processEscape(Toy_VM* vm) {
|
|||||||
|
|
||||||
while (diff > 0 && vm->scope != NULL) {
|
while (diff > 0 && vm->scope != NULL) {
|
||||||
vm->scope = Toy_popScope(vm->scope);
|
vm->scope = Toy_popScope(vm->scope);
|
||||||
|
diff--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
100
tests/integrations/test_keyword_while_break_continue.toy
Normal file
100
tests/integrations/test_keyword_while_break_continue.toy
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
//make sure it works with multiple repititions
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
break;
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag1: bool = true;
|
||||||
|
while (flag1) {
|
||||||
|
flag1 = false;
|
||||||
|
continue;
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
break;
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag2: bool = true;
|
||||||
|
while (flag2) {
|
||||||
|
flag2 = false;
|
||||||
|
continue;
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
break;
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag3: bool = true;
|
||||||
|
while (flag3) {
|
||||||
|
flag3 = false;
|
||||||
|
continue;
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
{
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
break;
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag4: bool = true;
|
||||||
|
while (flag4) {
|
||||||
|
flag4 = false;
|
||||||
|
continue;
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------
|
||||||
|
|
||||||
|
{
|
||||||
|
//test break
|
||||||
|
while (true) {
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
assert false, "break failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test continue
|
||||||
|
var flag5: bool = true;
|
||||||
|
while (flag5) {
|
||||||
|
flag5 = false;
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
assert false, "continue failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "done";
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user