🐐 Step in for loop
This commit is contained in:
86
tests.py
86
tests.py
@@ -894,6 +894,8 @@ error_tests = [
|
||||
('CVM RETE\nAVSCVLTA(LXXX)', CentvrionError), # AVSCVLTA: no routes registered
|
||||
('AVSCVLTA(LXXX)', CentvrionError), # RETE required for AVSCVLTA
|
||||
('CVM RETE\nPETITVR("/", FVNCTIO (r) VT {\nREDI("hi")\n})\nAVSCVLTA("text")', CentvrionError), # AVSCVLTA port must be integer
|
||||
("DONICVM i VT I VSQVE X GRADV I - I FAC { DIC(i) }", CentvrionError), # GRADV zero step
|
||||
('DONICVM i VT I VSQVE X GRADV "foo" FAC { DIC(i) }', CentvrionError), # GRADV non-integer step
|
||||
]
|
||||
|
||||
class TestErrors(unittest.TestCase):
|
||||
@@ -1705,6 +1707,90 @@ loop_edge_tests = [
|
||||
ExpressionStatement(Invoca(ID("f"), [])),
|
||||
]),
|
||||
ValInt(4)), # returns b=IV when a=III
|
||||
# DONICVM GRADV II, endpoint hit exactly: [I, III, V]
|
||||
("DONICVM i VT I VSQVE V GRADV II FAC { DIC(i) }",
|
||||
Program([], [PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("V"), Numeral("II")),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("V"), "I\nIII\nV\n"),
|
||||
# DONICVM GRADV II, endpoint overshot: VI excluded, stops at V
|
||||
("DONICVM i VT I VSQVE VI GRADV II FAC { DIC(i) }",
|
||||
Program([], [PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("VI"), Numeral("II")),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("V"), "I\nIII\nV\n"),
|
||||
# DONICVM GRADV I is equivalent to default step
|
||||
("DONICVM i VT I VSQVE III GRADV I FAC { DIC(i) }",
|
||||
Program([], [PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("III"), Numeral("I")),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("III"), "I\nII\nIII\n"),
|
||||
# DONICVM descending by I
|
||||
("CVM SVBNVLLA\nDONICVM i VT V VSQVE I GRADV - I FAC { DIC(i) }",
|
||||
Program([ModuleCall("SVBNVLLA")], [PerStatement(
|
||||
DataRangeArray(Numeral("V"), Numeral("I"), UnaryMinus(Numeral("I"))),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("I"), "V\nIV\nIII\nII\nI\n"),
|
||||
# DONICVM descending by II, endpoint overshot
|
||||
("CVM SVBNVLLA\nDONICVM i VT X VSQVE I GRADV - II FAC { DIC(i) }",
|
||||
Program([ModuleCall("SVBNVLLA")], [PerStatement(
|
||||
DataRangeArray(Numeral("X"), Numeral("I"), UnaryMinus(Numeral("II"))),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("II"), "X\nVIII\nVI\nIV\nII\n"),
|
||||
# DONICVM with step bound to a variable
|
||||
("DESIGNA s VT II\nDONICVM i VT I VSQVE V GRADV s FAC { DIC(i) }",
|
||||
Program([], [
|
||||
Designa(ID("s"), Numeral("II")),
|
||||
PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("V"), ID("s")),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("V"), "I\nIII\nV\n"),
|
||||
# DONICVM from == to with nonzero step: single iteration
|
||||
("DONICVM i VT III VSQVE III GRADV II FAC { DIC(i) }",
|
||||
Program([], [PerStatement(
|
||||
DataRangeArray(Numeral("III"), Numeral("III"), Numeral("II")),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("III"), "III\n"),
|
||||
# DONICVM direction mismatch — negative step with ascending bounds: body never runs
|
||||
("CVM SVBNVLLA\nDESIGNA x VT NVLLVS\nDONICVM i VT I VSQVE X GRADV - I FAC { DESIGNA x VT x + i }\nx",
|
||||
Program([ModuleCall("SVBNVLLA")], [
|
||||
Designa(ID("x"), Nullus()),
|
||||
PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("X"), UnaryMinus(Numeral("I"))),
|
||||
ID("i"),
|
||||
[Designa(ID("x"), BinOp(ID("x"), ID("i"), "SYMBOL_PLUS"))]),
|
||||
ExpressionStatement(ID("x"))]),
|
||||
ValNul(), ""),
|
||||
# Range-array literal with GRADV used via PER
|
||||
("PER i IN [I VSQVE V GRADV II] FAC { DIC(i) }",
|
||||
Program([], [PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("V"), Numeral("II")),
|
||||
ID("i"),
|
||||
[ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("V"), "I\nIII\nV\n"),
|
||||
# DONICVM GRADV II with CONTINVA: skip value V, print the others
|
||||
("DONICVM i VT I VSQVE IX GRADV II FAC {\nSI i EST V TVNC { CONTINVA }\nDIC(i)\n}",
|
||||
Program([], [PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("IX"), Numeral("II")),
|
||||
ID("i"),
|
||||
[SiStatement(BinOp(ID("i"), Numeral("V"), "KEYWORD_EST"), [Continva()], None),
|
||||
ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("IX"), "I\nIII\nVII\nIX\n"),
|
||||
# DONICVM GRADV II with ERVMPE: stop at V (last successful DIC was III)
|
||||
("DONICVM i VT I VSQVE IX GRADV II FAC {\nSI i EST V TVNC { ERVMPE }\nDIC(i)\n}",
|
||||
Program([], [PerStatement(
|
||||
DataRangeArray(Numeral("I"), Numeral("IX"), Numeral("II")),
|
||||
ID("i"),
|
||||
[SiStatement(BinOp(ID("i"), Numeral("V"), "KEYWORD_EST"), [Erumpe()], None),
|
||||
ExpressionStatement(BuiltIn("DIC", [ID("i")]))])]),
|
||||
ValStr("III"), "I\nIII\n"),
|
||||
]
|
||||
|
||||
class TestLoopEdge(unittest.TestCase):
|
||||
|
||||
Reference in New Issue
Block a user