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

Correction

parent a76e9d91
Branches tp2-correction
No related tags found
No related merge requests found
......@@ -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
......@@ -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))()
......@@ -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),
}
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment