Skip to content
Snippets Groups Projects
Commit 5ffe4a99 authored by Florentin Labelle's avatar Florentin Labelle
Browse files

Correction

parent af784cc2
Branches tp2-correction
No related tags found
No related merge requests found
...@@ -4,7 +4,6 @@ stages: ...@@ -4,7 +4,6 @@ stages:
- dependencies - dependencies
- lint - lint
- test - test
- deploy
download_dependencies: download_dependencies:
stage: dependencies stage: dependencies
...@@ -23,12 +22,19 @@ pylint: ...@@ -23,12 +22,19 @@ pylint:
- download_dependencies - download_dependencies
needs: needs:
- download_dependencies - download_dependencies
before_script: script:
- source .venv/bin/activate - source .venv/bin/activate
- pip install pylint - pip install pylint
script:
- pylint calculator --fail-on=error - pylint calculator --fail-on=error
# À toi de nous rajouter un petit job pour faire des tests unitaires # À toi de nous rajouter un petit job pour faire des tests unitaires
pytest: pytest:
## Bon courage stage: test
dependencies:
- download_dependencies
needs:
- download_dependencies
script:
- source .venv/bin/activate
- pip install pytest
- pytest calculator
...@@ -52,9 +52,9 @@ class Calculator: ...@@ -52,9 +52,9 @@ class Calculator:
for i, token in enumerate(tokens): for i, token in enumerate(tokens):
if isinstance(token, Operator): 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 = token
operator_index = i operator_index = i
...@@ -66,4 +66,5 @@ class Calculator: ...@@ -66,4 +66,5 @@ class Calculator:
return OperatorExpression(operator, self.parse(left), self.parse(right)) return OperatorExpression(operator, self.parse(left), self.parse(right))
def __call__(self, expression: str) -> Term: def __call__(self, expression: str) -> Term:
# return 5
return self.parse(self.tokenize(expression))() return self.parse(self.tokenize(expression))()
...@@ -22,5 +22,5 @@ STANDARD_OPERATORS = { ...@@ -22,5 +22,5 @@ STANDARD_OPERATORS = {
'+': Operator('+', 1, lambda a, b: a + b), '+': Operator('+', 1, lambda a, b: a + b),
'-': 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),
} }
...@@ -25,7 +25,12 @@ def test_tokenizer(setup): ...@@ -25,7 +25,12 @@ def test_tokenizer(setup):
Test the tokenizer. Test the tokenizer.
""" """
plus, minus, times, divide, calc = setup 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): def test_parser(setup):
...@@ -33,12 +38,21 @@ def test_parser(setup): ...@@ -33,12 +38,21 @@ def test_parser(setup):
Test the parser. Test the parser.
""" """
plus, minus, times, divide, calc = setup 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): def test_evaluation(setup):
""" """
Test the evaluation. Test the evaluation.
""" """
plus, minus, times, divide, calc = setup _, _, _, _, calc = setup
# À toi de tester la fonction __call__ de Calculator. 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment