Skip to content

Commit 6d2cd74

Browse files
committed
Correct Lookup[]'s attributes.
Add more robustness to test case that assumes an uninitialized variable.
1 parent a8b73ca commit 6d2cd74

4 files changed

Lines changed: 25 additions & 2 deletions

File tree

mathics/builtin/list/associations.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from mathics.builtin.box.layout import RowBox
1212
from mathics.core.atoms import Integer
13-
from mathics.core.attributes import A_HOLD_ALL_COMPLETE, A_PROTECTED
13+
from mathics.core.attributes import A_HOLD_ALL_COMPLETE, A_PROTECTED, A_READ_PROTECTED
1414
from mathics.core.builtin import Builtin, Test
1515
from mathics.core.convert.expression import to_mathics_list
1616
from mathics.core.evaluation import Evaluation
@@ -279,7 +279,7 @@ class Lookup(Builtin):
279279
280280
"""
281281

282-
attributes = A_HOLD_ALL_COMPLETE | A_PROTECTED
282+
attributes = A_PROTECTED | A_READ_PROTECTED
283283

284284
messages = {
285285
"invrl": "The argument `1` is not a valid Association or a list of rules.",

mathics/eval/list/associations.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
def eval_Lookup(assoc, key, default, evaluation: Evaluation):
88
"""Evaluation method for Lookup."""
9+
910
if assoc.has_form("Association", None):
1011
# Search through association elements (rules)
1112
for element in assoc.elements:

test/builtin/list/test_association.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,3 +263,24 @@ def test_map_over_associations(
263263
failure_message=assert_message,
264264
expected_messages=expected_messages,
265265
)
266+
267+
268+
@pytest.mark.parametrize(
269+
("str_expr", "expected_messages", "str_expected", "assert_message"),
270+
[
271+
(
272+
'a=Association[{"F":>1,"G":>2}]; Lookup[a, "H"]',
273+
None,
274+
"Missing[KeyAbsent, H]",
275+
"Lookup test on an association variable where the key is not found.",
276+
),
277+
("ClearAll[a];", None, "Null", None),
278+
],
279+
)
280+
def test_lookup(str_expr, expected_messages, str_expected, assert_message):
281+
check_evaluation(
282+
str_expr,
283+
str_expected,
284+
failure_message=assert_message,
285+
expected_messages=expected_messages,
286+
)

test/builtin/list/test_eol.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
@pytest.mark.parametrize(
1111
("str_expr", "expected_messages", "str_expected", "assert_message"),
1212
[
13+
("ClearAll[a];", None, "Null", None),
1314
(
1415
"Append[a, b]",
1516
("Nonatomic expression expected at position 1 in Append[a, b].",),

0 commit comments

Comments
 (0)