From df3a9ee2c37b018d9d63ba68936e3ccc837717de Mon Sep 17 00:00:00 2001 From: Florentin Labelle <florentin.labelle@student-cs.fr> Date: Wed, 12 Oct 2022 14:47:45 +0200 Subject: [PATCH] Correction --- .gitlab-ci.yml | 14 ++++++++++---- calculator/calculator.py | 5 +++-- calculator/operators.py | 4 ++-- calculator/test_calculator.py | 22 ++++++++++++++++++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index faa48b7..7860581 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,6 @@ stages: - dependencies - lint - test - - deploy download_dependencies: stage: dependencies @@ -23,12 +22,19 @@ pylint: - download_dependencies needs: - download_dependencies - before_script: + script: - source .venv/bin/activate - pip install pylint - script: - pylint calculator --fail-on=error # À toi de nous rajouter un petit job pour faire des tests unitaires pytest: - ## Bon courage + stage: test + dependencies: + - download_dependencies + needs: + - download_dependencies + script: + - source .venv/bin/activate + - pip install pytest + - pytest calculator diff --git a/calculator/calculator.py b/calculator/calculator.py index fd70878..baf8449 100644 --- a/calculator/calculator.py +++ b/calculator/calculator.py @@ -52,9 +52,9 @@ class Calculator: for i, token in enumerate(tokens): if isinstance(token, Operator): ##################################################################### - ### ATTENTION: Est-ce que c'est vraiment un < (non c'est un <=) ? ### + ### ATTENTION: Est-ce que c'est vraiment un < ? (non c'est un <=) ### ##################################################################### - if operator is None or token.precedence < operator.precedence: + if operator is None or token.precedence <= operator.precedence: operator = token operator_index = i @@ -66,4 +66,5 @@ class Calculator: return OperatorExpression(operator, self.parse(left), self.parse(right)) def __call__(self, expression: str) -> Term: + # return 5 return self.parse(self.tokenize(expression))() diff --git a/calculator/operators.py b/calculator/operators.py index 5a48950..db66817 100644 --- a/calculator/operators.py +++ b/calculator/operators.py @@ -21,6 +21,6 @@ class Operator: STANDARD_OPERATORS = { '+': Operator('+', 1, lambda a, b: a + b), '-': Operator('-', 1, lambda a, b: a - b), - '*': Operator('×', 2, lambda a, b: a * b), - '/': Operator('/', 2, lambda a, b: a % b), + '*': Operator('*', 2, lambda a, b: a * b), + '/': Operator('/', 2, lambda a, b: a / b), } diff --git a/calculator/test_calculator.py b/calculator/test_calculator.py index 03a63c3..dabf407 100644 --- a/calculator/test_calculator.py +++ b/calculator/test_calculator.py @@ -25,7 +25,12 @@ def test_tokenizer(setup): Test the tokenizer. """ plus, minus, times, divide, calc = setup - # À toi de tester la fonction tokenize de Calculator. + assert calc.tokenize("1 + 2") == [1, plus, 2] + assert calc.tokenize("1 + 2 * 3") == [1, plus, 2, times, 3] + assert calc.tokenize( + "1 + 2 * 3 / 4") == [1, plus, 2, times, 3, divide, 4] + assert calc.tokenize( + "1 + 2 * 3 / 4 - 5") == [1, plus, 2, times, 3, divide, 4, minus, 5] def test_parser(setup): @@ -33,12 +38,21 @@ def test_parser(setup): Test the parser. """ plus, minus, times, divide, calc = setup - # À toi de tester la fonction parse de Calculator. + assert repr(calc.parse([1, plus, 2])) == '(1 + 2)' + assert repr(calc.parse([1, plus, 2, times, 3]) + ) == '(1 + (2 * 3))' + assert repr(calc.parse( + [1, plus, 2, times, 3, divide, 4])) == '(1 + ((2 * 3) / 4))' + assert repr(calc.parse([1, plus, 2, times, 3, divide, + 4, minus, 5])) == '((1 + ((2 * 3) / 4)) - 5)' def test_evaluation(setup): """ Test the evaluation. """ - plus, minus, times, divide, calc = setup - # À toi de tester la fonction __call__ de Calculator. + _, _, _, _, calc = setup + assert calc("1 + 2") == 3 + assert calc("1 + 2 * 3") == 7 + assert calc("1 + 2 * 3 / 4") == 2.5 + assert calc("1 + 2 * 3 / 4 - 5") == -2.5 -- GitLab