🐐 Aeternum loops
This commit is contained in:
44
tests.py
44
tests.py
@@ -342,6 +342,50 @@ control_tests = [
|
||||
DumStatement(Bool(False), [ExpressionStatement(BuiltIn("DICE", [ID("x")])), Erumpe()]),
|
||||
]),
|
||||
ValStr("I"), "I\n"),
|
||||
# AETERNVM is sugar for DVM FALSITAS — must produce the same AST.
|
||||
("DESIGNA x VT I\nAETERNVM FACE {\nDICE(x)\nERVMPE\n}",
|
||||
Program([], [
|
||||
Designa(ID("x"), Numeral("I")),
|
||||
DumStatement(Bool(False), [ExpressionStatement(BuiltIn("DICE", [ID("x")])), Erumpe()]),
|
||||
]),
|
||||
ValStr("I"), "I\n"),
|
||||
# AETERNVM with counter + ERVMPE on condition
|
||||
("DESIGNA x VT I\nAETERNVM FACE {\nSI x EST III TVNC { ERVMPE }\nDESIGNA x VT x + I\n}\nx",
|
||||
Program([], [
|
||||
Designa(ID("x"), Numeral("I")),
|
||||
DumStatement(Bool(False), [
|
||||
SiStatement(BinOp(ID("x"), Numeral("III"), "KEYWORD_EST"), [Erumpe()], None),
|
||||
Designa(ID("x"), BinOp(ID("x"), Numeral("I"), "SYMBOL_PLUS")),
|
||||
]),
|
||||
ExpressionStatement(ID("x")),
|
||||
]),
|
||||
ValInt(3)),
|
||||
# AETERNVM with CONTINVA — skip printing III; ERVMPE after V.
|
||||
# Return value is ValNul because the iteration that triggers ERVMPE runs
|
||||
# Designa first (resetting last_val); we test on output, which is the point.
|
||||
("DESIGNA x VT NVLLVS\nAETERNVM FACE {\nDESIGNA x VT x + I\nSI x PLVS V TVNC { ERVMPE }\nSI x EST III TVNC { CONTINVA }\nDICE(x)\n}",
|
||||
Program([], [
|
||||
Designa(ID("x"), Nullus()),
|
||||
DumStatement(Bool(False), [
|
||||
Designa(ID("x"), BinOp(ID("x"), Numeral("I"), "SYMBOL_PLUS")),
|
||||
SiStatement(BinOp(ID("x"), Numeral("V"), "KEYWORD_PLVS"), [Erumpe()], None),
|
||||
SiStatement(BinOp(ID("x"), Numeral("III"), "KEYWORD_EST"), [Continva()], None),
|
||||
ExpressionStatement(BuiltIn("DICE", [ID("x")])),
|
||||
]),
|
||||
]),
|
||||
ValNul(), "I\nII\nIV\nV\n"),
|
||||
# REDI inside AETERNVM (inside DEFINI) — exits both loop and function
|
||||
(
|
||||
"DEFINI f () VT {\nDESIGNA x VT I\nAETERNVM FACE {\nREDI (x)\n}\n}\nINVOCA f ()",
|
||||
Program([], [
|
||||
Defini(ID("f"), [], [
|
||||
Designa(ID("x"), Numeral("I")),
|
||||
DumStatement(Bool(False), [Redi([ID("x")])]),
|
||||
]),
|
||||
ExpressionStatement(Invoca(ID("f"), [])),
|
||||
]),
|
||||
ValInt(1),
|
||||
),
|
||||
# PER foreach
|
||||
("PER i IN [I, II, III] FACE { DICE(i) }",
|
||||
Program([], [PerStatement(DataArray([Numeral("I"), Numeral("II"), Numeral("III")]), ID("i"), [ExpressionStatement(BuiltIn("DICE", [ID("i")]))])]),
|
||||
|
||||
Reference in New Issue
Block a user