From 36afc017d4343b994732b177329cc8b3c1c1f47e Mon Sep 17 00:00:00 2001 From: Luciano Ramalho Date: Wed, 9 Jun 2021 19:41:34 -0300 Subject: [PATCH] lis.py: removed 'global_env' as default for 'evaluate(x, env)' --- 18-context-mngr/lispy/py3.10/lis.py | 2 +- 18-context-mngr/lispy/py3.10/lis_test.py | 21 ++++++++++++--------- 18-context-mngr/lispy/py3.9/lis.py | 2 +- 18-context-mngr/lispy/py3.9/lis_test.py | 21 ++++++++++++--------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/18-context-mngr/lispy/py3.10/lis.py b/18-context-mngr/lispy/py3.10/lis.py index b5df2c0..aa79411 100644 --- a/18-context-mngr/lispy/py3.10/lis.py +++ b/18-context-mngr/lispy/py3.10/lis.py @@ -139,7 +139,7 @@ def lispstr(exp: object) -> str: ################ eval -def evaluate(x: Expression, env: Environment = global_env) -> Any: +def evaluate(x: Expression, env: Environment) -> Any: "Evaluate an expression in an environment." match x: case str(): # variable reference diff --git a/18-context-mngr/lispy/py3.10/lis_test.py b/18-context-mngr/lispy/py3.10/lis_test.py index f9c96ae..55fd361 100755 --- a/18-context-mngr/lispy/py3.10/lis_test.py +++ b/18-context-mngr/lispy/py3.10/lis_test.py @@ -4,6 +4,9 @@ from pytest import mark, fixture from lis import parse, evaluate, Expression, Environment, standard_env +# Norvig's tests are not isolated: they assume the +# same environment from first to last test. +ENV_FOR_FIRST_TEST = standard_env() @mark.parametrize( 'source, expected', [ ("(quote (testing 1 (2.0) -3.14e159))", ['testing', 1, [2.0], -3.14e159]), @@ -40,7 +43,7 @@ from lis import parse, evaluate, Expression, Environment, standard_env ("(riff-shuffle (riff-shuffle (riff-shuffle (list 1 2 3 4 5 6 7 8))))", [1,2,3,4,5,6,7,8]), ]) def test_evaluate(source: str, expected: Optional[Expression]) -> None: - got = evaluate(parse(source)) + got = evaluate(parse(source), ENV_FOR_FIRST_TEST) assert got == expected @@ -58,31 +61,31 @@ def test_evaluate_variable() -> None: assert got == expected -def test_evaluate_literal() -> None: +def test_evaluate_literal(std_env: Environment) -> None: source = '3.3' expected = 3.3 - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected -def test_evaluate_quote() -> None: +def test_evaluate_quote(std_env: Environment) -> None: source = '(quote (1.1 is not 1))' expected = [1.1, 'is', 'not', 1] - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected -def test_evaluate_if_true() -> None: +def test_evaluate_if_true(std_env: Environment) -> None: source = '(if 1 10 no-such-thing)' expected = 10 - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected -def test_evaluate_if_false() -> None: +def test_evaluate_if_false(std_env: Environment) -> None: source = '(if 0 no-such-thing 20)' expected = 20 - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected diff --git a/18-context-mngr/lispy/py3.9/lis.py b/18-context-mngr/lispy/py3.9/lis.py index fcedd1e..1843738 100644 --- a/18-context-mngr/lispy/py3.9/lis.py +++ b/18-context-mngr/lispy/py3.9/lis.py @@ -138,7 +138,7 @@ def lispstr(exp: object) -> str: ################ eval -def evaluate(x: Expression, env: Environment = global_env) -> Any: +def evaluate(x: Expression, env: Environment) -> Any: "Evaluate an expression in an environment." if isinstance(x, str): # variable reference return env[x] diff --git a/18-context-mngr/lispy/py3.9/lis_test.py b/18-context-mngr/lispy/py3.9/lis_test.py index f9c96ae..55fd361 100755 --- a/18-context-mngr/lispy/py3.9/lis_test.py +++ b/18-context-mngr/lispy/py3.9/lis_test.py @@ -4,6 +4,9 @@ from pytest import mark, fixture from lis import parse, evaluate, Expression, Environment, standard_env +# Norvig's tests are not isolated: they assume the +# same environment from first to last test. +ENV_FOR_FIRST_TEST = standard_env() @mark.parametrize( 'source, expected', [ ("(quote (testing 1 (2.0) -3.14e159))", ['testing', 1, [2.0], -3.14e159]), @@ -40,7 +43,7 @@ from lis import parse, evaluate, Expression, Environment, standard_env ("(riff-shuffle (riff-shuffle (riff-shuffle (list 1 2 3 4 5 6 7 8))))", [1,2,3,4,5,6,7,8]), ]) def test_evaluate(source: str, expected: Optional[Expression]) -> None: - got = evaluate(parse(source)) + got = evaluate(parse(source), ENV_FOR_FIRST_TEST) assert got == expected @@ -58,31 +61,31 @@ def test_evaluate_variable() -> None: assert got == expected -def test_evaluate_literal() -> None: +def test_evaluate_literal(std_env: Environment) -> None: source = '3.3' expected = 3.3 - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected -def test_evaluate_quote() -> None: +def test_evaluate_quote(std_env: Environment) -> None: source = '(quote (1.1 is not 1))' expected = [1.1, 'is', 'not', 1] - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected -def test_evaluate_if_true() -> None: +def test_evaluate_if_true(std_env: Environment) -> None: source = '(if 1 10 no-such-thing)' expected = 10 - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected -def test_evaluate_if_false() -> None: +def test_evaluate_if_false(std_env: Environment) -> None: source = '(if 0 no-such-thing 20)' expected = 20 - got = evaluate(parse(source)) + got = evaluate(parse(source), std_env) assert got == expected