🐐 LTE/GTE
This commit is contained in:
42
tests.py
42
tests.py
@@ -729,6 +729,8 @@ error_tests = [
|
||||
("I - \"hello\"", CentvrionError), # subtraction with string
|
||||
("I * \"hello\"", CentvrionError), # multiplication with string
|
||||
("\"hello\" MINVS \"world\"", CentvrionError), # comparison with strings
|
||||
('"a" HAVD_PLVS "b"', CentvrionError), # HAVD_PLVS on strings
|
||||
('[I] HAVD_MINVS [II]', CentvrionError), # HAVD_MINVS on arrays
|
||||
("I[I]", CentvrionError), # indexing a non-array
|
||||
('"SALVTE"[VII]', CentvrionError), # string index out of range
|
||||
('"SALVTE"[NVLLVS]', CentvrionError), # string index with non-integer
|
||||
@@ -1302,6 +1304,27 @@ comparison_tests = [
|
||||
("[] EST []", Program([], [ExpressionStatement(BinOp(DataArray([]), DataArray([]), "KEYWORD_EST"))]), ValBool(True)),
|
||||
("[I, II] DISPAR [I, III]", Program([], [ExpressionStatement(BinOp(DataArray([Numeral("I"), Numeral("II")]), DataArray([Numeral("I"), Numeral("III")]), "KEYWORD_DISPAR"))]), ValBool(True)),
|
||||
("[I, II] DISPAR [I, II]", Program([], [ExpressionStatement(BinOp(DataArray([Numeral("I"), Numeral("II")]), DataArray([Numeral("I"), Numeral("II")]), "KEYWORD_DISPAR"))]), ValBool(False)),
|
||||
# HAVD_PLVS (<=) and HAVD_MINVS (>=)
|
||||
("I HAVD_PLVS II", Program([], [ExpressionStatement(BinOp(Numeral("I"), Numeral("II"), "KEYWORD_HAVD_PLVS"))]), ValBool(True)),
|
||||
("II HAVD_PLVS I", Program([], [ExpressionStatement(BinOp(Numeral("II"), Numeral("I"), "KEYWORD_HAVD_PLVS"))]), ValBool(False)),
|
||||
# equality boundary — the only case that distinguishes <= from <
|
||||
("II HAVD_PLVS II", Program([], [ExpressionStatement(BinOp(Numeral("II"), Numeral("II"), "KEYWORD_HAVD_PLVS"))]), ValBool(True)),
|
||||
("II HAVD_MINVS I", Program([], [ExpressionStatement(BinOp(Numeral("II"), Numeral("I"), "KEYWORD_HAVD_MINVS"))]), ValBool(True)),
|
||||
("I HAVD_MINVS II", Program([], [ExpressionStatement(BinOp(Numeral("I"), Numeral("II"), "KEYWORD_HAVD_MINVS"))]), ValBool(False)),
|
||||
# equality boundary — the only case that distinguishes >= from >
|
||||
("II HAVD_MINVS II",Program([], [ExpressionStatement(BinOp(Numeral("II"), Numeral("II"), "KEYWORD_HAVD_MINVS"))]), ValBool(True)),
|
||||
# NVLLVS coerces to 0
|
||||
("V HAVD_MINVS NVLLVS", Program([], [ExpressionStatement(BinOp(Numeral("V"), Nullus(), "KEYWORD_HAVD_MINVS"))]), ValBool(True)),
|
||||
("NVLLVS HAVD_PLVS V", Program([], [ExpressionStatement(BinOp(Nullus(), Numeral("V"), "KEYWORD_HAVD_PLVS"))]), ValBool(True)),
|
||||
("NVLLVS HAVD_PLVS NVLLVS", Program([], [ExpressionStatement(BinOp(Nullus(), Nullus(), "KEYWORD_HAVD_PLVS"))]), ValBool(True)),
|
||||
# precedence: * binds tighter, so II*III HAVD_PLVS VI parses as (II*III) HAVD_PLVS VI = 6 <= 6 = True
|
||||
("II * III HAVD_PLVS VI",
|
||||
Program([], [ExpressionStatement(BinOp(BinOp(Numeral("II"), Numeral("III"), "SYMBOL_TIMES"), Numeral("VI"), "KEYWORD_HAVD_PLVS"))]),
|
||||
ValBool(True)),
|
||||
# control flow: SI ... HAVD_MINVS
|
||||
("SI II HAVD_MINVS II TVNC { DESIGNA r VT I } ALIVD { DESIGNA r VT II }\nr",
|
||||
Program([], [SiStatement(BinOp(Numeral("II"), Numeral("II"), "KEYWORD_HAVD_MINVS"), [Designa(ID("r"), Numeral("I"))], [Designa(ID("r"), Numeral("II"))]), ExpressionStatement(ID("r"))]),
|
||||
ValInt(1)),
|
||||
]
|
||||
|
||||
class TestComparisons(unittest.TestCase):
|
||||
@@ -2436,6 +2459,25 @@ fractio_comparison_tests = [
|
||||
]),
|
||||
ValBool(False)
|
||||
),
|
||||
# HAVD_PLVS / HAVD_MINVS on fractions — equality boundary distinguishes from MINVS / PLVS
|
||||
("CVM FRACTIO\nIIIS HAVD_PLVS III",
|
||||
Program([ModuleCall("FRACTIO")], [
|
||||
ExpressionStatement(BinOp(Fractio("IIIS"), Numeral("III"), "KEYWORD_HAVD_PLVS"))
|
||||
]),
|
||||
ValBool(False) # 3.5 <= 3 is false
|
||||
),
|
||||
("CVM FRACTIO\nIIIS HAVD_MINVS IIIS",
|
||||
Program([ModuleCall("FRACTIO")], [
|
||||
ExpressionStatement(BinOp(Fractio("IIIS"), Fractio("IIIS"), "KEYWORD_HAVD_MINVS"))
|
||||
]),
|
||||
ValBool(True) # 3.5 >= 3.5 is true (equality boundary)
|
||||
),
|
||||
("CVM FRACTIO\nIIIS HAVD_PLVS IIIS",
|
||||
Program([ModuleCall("FRACTIO")], [
|
||||
ExpressionStatement(BinOp(Fractio("IIIS"), Fractio("IIIS"), "KEYWORD_HAVD_PLVS"))
|
||||
]),
|
||||
ValBool(True) # 3.5 <= 3.5 is true (equality boundary)
|
||||
),
|
||||
# equality: fraction == fraction
|
||||
("CVM FRACTIO\nIIIS EST IIIS",
|
||||
Program([ModuleCall("FRACTIO")], [
|
||||
|
||||
Reference in New Issue
Block a user