🐐 Index assignment
This commit is contained in:
119
tests.py
119
tests.py
@@ -1774,7 +1774,7 @@ array_index_assign_tests = [
|
||||
("DESIGNA a VT [I, II, III]\nDESIGNA a[II] VT X\na[II]",
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([Numeral("I"), Numeral("II"), Numeral("III")])),
|
||||
DesignaIndex(ID("a"), Numeral("II"), Numeral("X")),
|
||||
DesignaIndex(ID("a"), [Numeral("II")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ID("a"), Numeral("II"))),
|
||||
]),
|
||||
ValInt(10)),
|
||||
@@ -1782,7 +1782,7 @@ array_index_assign_tests = [
|
||||
("DESIGNA a VT [I, II, III]\nDESIGNA a[I] VT V\na[I]",
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([Numeral("I"), Numeral("II"), Numeral("III")])),
|
||||
DesignaIndex(ID("a"), Numeral("I"), Numeral("V")),
|
||||
DesignaIndex(ID("a"), [Numeral("I")], Numeral("V")),
|
||||
ExpressionStatement(ArrayIndex(ID("a"), Numeral("I"))),
|
||||
]),
|
||||
ValInt(5)),
|
||||
@@ -1790,7 +1790,7 @@ array_index_assign_tests = [
|
||||
("DESIGNA a VT [I, II, III]\nDESIGNA a[III] VT L\na[III]",
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([Numeral("I"), Numeral("II"), Numeral("III")])),
|
||||
DesignaIndex(ID("a"), Numeral("III"), Numeral("L")),
|
||||
DesignaIndex(ID("a"), [Numeral("III")], Numeral("L")),
|
||||
ExpressionStatement(ArrayIndex(ID("a"), Numeral("III"))),
|
||||
]),
|
||||
ValInt(50)),
|
||||
@@ -1798,7 +1798,7 @@ array_index_assign_tests = [
|
||||
("DESIGNA a VT [I, II, III]\nDESIGNA a[II] VT X\na[I]",
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([Numeral("I"), Numeral("II"), Numeral("III")])),
|
||||
DesignaIndex(ID("a"), Numeral("II"), Numeral("X")),
|
||||
DesignaIndex(ID("a"), [Numeral("II")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ID("a"), Numeral("I"))),
|
||||
]),
|
||||
ValInt(1)),
|
||||
@@ -1807,7 +1807,7 @@ array_index_assign_tests = [
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([Numeral("I"), Numeral("II"), Numeral("III")])),
|
||||
Designa(ID("i"), Numeral("II")),
|
||||
DesignaIndex(ID("a"), ID("i"), Numeral("X")),
|
||||
DesignaIndex(ID("a"), [ID("i")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ID("a"), Numeral("II"))),
|
||||
]),
|
||||
ValInt(10)),
|
||||
@@ -1819,6 +1819,109 @@ class TestArrayIndexAssign(unittest.TestCase):
|
||||
run_test(self, source, nodes, value)
|
||||
|
||||
|
||||
# --- Multi-dimensional array index assignment ---
|
||||
|
||||
multidim_assign_tests = [
|
||||
# 2D array assignment
|
||||
("DESIGNA a VT [[I, II], [III, IV]]\nDESIGNA a[I][II] VT X\na[I][II]",
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([DataArray([Numeral("I"), Numeral("II")]), DataArray([Numeral("III"), Numeral("IV")])])),
|
||||
DesignaIndex(ID("a"), [Numeral("I"), Numeral("II")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ArrayIndex(ID("a"), Numeral("I")), Numeral("II"))),
|
||||
]),
|
||||
ValInt(10)),
|
||||
# other elements unaffected
|
||||
("DESIGNA a VT [[I, II], [III, IV]]\nDESIGNA a[I][II] VT X\na[II][I]",
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([DataArray([Numeral("I"), Numeral("II")]), DataArray([Numeral("III"), Numeral("IV")])])),
|
||||
DesignaIndex(ID("a"), [Numeral("I"), Numeral("II")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ArrayIndex(ID("a"), Numeral("II")), Numeral("I"))),
|
||||
]),
|
||||
ValInt(3)),
|
||||
# dict inside array
|
||||
('DESIGNA a VT [TABVLA {"x" VT I}]\nDESIGNA a[I]["x"] VT X\na[I]["x"]',
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([DataDict([(String("x"), Numeral("I"))])])),
|
||||
DesignaIndex(ID("a"), [Numeral("I"), String("x")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ArrayIndex(ID("a"), Numeral("I")), String("x"))),
|
||||
]),
|
||||
ValInt(10)),
|
||||
# array inside dict
|
||||
('DESIGNA d VT TABVLA {"a" VT [I, II]}\nDESIGNA d["a"][I] VT X\nd["a"][I]',
|
||||
Program([], [
|
||||
Designa(ID("d"), DataDict([(String("a"), DataArray([Numeral("I"), Numeral("II")]))])),
|
||||
DesignaIndex(ID("d"), [String("a"), Numeral("I")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ArrayIndex(ID("d"), String("a")), Numeral("I"))),
|
||||
]),
|
||||
ValInt(10)),
|
||||
# 3 levels deep
|
||||
("DESIGNA a VT [[[I]]]\nDESIGNA a[I][I][I] VT X\na[I][I][I]",
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([DataArray([DataArray([Numeral("I")])])])),
|
||||
DesignaIndex(ID("a"), [Numeral("I"), Numeral("I"), Numeral("I")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ArrayIndex(ArrayIndex(ID("a"), Numeral("I")), Numeral("I")), Numeral("I"))),
|
||||
]),
|
||||
ValInt(10)),
|
||||
]
|
||||
|
||||
class TestMultidimAssign(unittest.TestCase):
|
||||
@parameterized.expand(multidim_assign_tests)
|
||||
def test_multidim_assign(self, source, nodes, value):
|
||||
run_test(self, source, nodes, value)
|
||||
|
||||
|
||||
# --- String index assignment ---
|
||||
|
||||
string_index_assign_tests = [
|
||||
# assign to middle character
|
||||
('DESIGNA s VT "ABCDE"\nDESIGNA s[III] VT "X"\ns',
|
||||
Program([], [
|
||||
Designa(ID("s"), String("ABCDE")),
|
||||
DesignaIndex(ID("s"), [Numeral("III")], String("X")),
|
||||
ExpressionStatement(ID("s")),
|
||||
]),
|
||||
ValStr("ABXDE")),
|
||||
# assign to first character
|
||||
('DESIGNA s VT "ABCDE"\nDESIGNA s[I] VT "Z"\ns',
|
||||
Program([], [
|
||||
Designa(ID("s"), String("ABCDE")),
|
||||
DesignaIndex(ID("s"), [Numeral("I")], String("Z")),
|
||||
ExpressionStatement(ID("s")),
|
||||
]),
|
||||
ValStr("ZBCDE")),
|
||||
# assign to last character
|
||||
('DESIGNA s VT "ABCDE"\nDESIGNA s[V] VT "Z"\ns',
|
||||
Program([], [
|
||||
Designa(ID("s"), String("ABCDE")),
|
||||
DesignaIndex(ID("s"), [Numeral("V")], String("Z")),
|
||||
ExpressionStatement(ID("s")),
|
||||
]),
|
||||
ValStr("ABCDZ")),
|
||||
# variable as index
|
||||
('DESIGNA s VT "ABCDE"\nDESIGNA i VT II\nDESIGNA s[i] VT "X"\ns',
|
||||
Program([], [
|
||||
Designa(ID("s"), String("ABCDE")),
|
||||
Designa(ID("i"), Numeral("II")),
|
||||
DesignaIndex(ID("s"), [ID("i")], String("X")),
|
||||
ExpressionStatement(ID("s")),
|
||||
]),
|
||||
ValStr("AXCDE")),
|
||||
# string inside array
|
||||
('DESIGNA a VT ["ABC", "DEF"]\nDESIGNA a[I][II] VT "X"\na[I]',
|
||||
Program([], [
|
||||
Designa(ID("a"), DataArray([String("ABC"), String("DEF")])),
|
||||
DesignaIndex(ID("a"), [Numeral("I"), Numeral("II")], String("X")),
|
||||
ExpressionStatement(ArrayIndex(ID("a"), Numeral("I"))),
|
||||
]),
|
||||
ValStr("AXC")),
|
||||
]
|
||||
|
||||
class TestStringIndexAssign(unittest.TestCase):
|
||||
@parameterized.expand(string_index_assign_tests)
|
||||
def test_string_index_assign(self, source, nodes, value):
|
||||
run_test(self, source, nodes, value)
|
||||
|
||||
|
||||
# --- Array slicing ---
|
||||
|
||||
array_slice_tests = [
|
||||
@@ -2495,7 +2598,7 @@ dict_assign_tests = [
|
||||
('DESIGNA d VT TABVLA {"a" VT I}\nDESIGNA d["a"] VT X\nd["a"]',
|
||||
Program([], [
|
||||
Designa(ID("d"), DataDict([(String("a"), Numeral("I"))])),
|
||||
DesignaIndex(ID("d"), String("a"), Numeral("X")),
|
||||
DesignaIndex(ID("d"), [String("a")], Numeral("X")),
|
||||
ExpressionStatement(ArrayIndex(ID("d"), String("a"))),
|
||||
]),
|
||||
ValInt(10)),
|
||||
@@ -2503,7 +2606,7 @@ dict_assign_tests = [
|
||||
('DESIGNA d VT TABVLA {"a" VT I}\nDESIGNA d["b"] VT II\nd["b"]',
|
||||
Program([], [
|
||||
Designa(ID("d"), DataDict([(String("a"), Numeral("I"))])),
|
||||
DesignaIndex(ID("d"), String("b"), Numeral("II")),
|
||||
DesignaIndex(ID("d"), [String("b")], Numeral("II")),
|
||||
ExpressionStatement(ArrayIndex(ID("d"), String("b"))),
|
||||
]),
|
||||
ValInt(2)),
|
||||
@@ -2511,7 +2614,7 @@ dict_assign_tests = [
|
||||
('DESIGNA d VT TABVLA {"a" VT I}\nDESIGNA d["b"] VT II\nd["a"]',
|
||||
Program([], [
|
||||
Designa(ID("d"), DataDict([(String("a"), Numeral("I"))])),
|
||||
DesignaIndex(ID("d"), String("b"), Numeral("II")),
|
||||
DesignaIndex(ID("d"), [String("b")], Numeral("II")),
|
||||
ExpressionStatement(ArrayIndex(ID("d"), String("a"))),
|
||||
]),
|
||||
ValInt(1)),
|
||||
|
||||
Reference in New Issue
Block a user