77 lines
3.8 KiB
Python
77 lines
3.8 KiB
Python
import pytest
|
|
|
|
from arithmetic_arranger import arithmetic_arranger
|
|
|
|
test_cases = [
|
|
pytest.param(
|
|
[['3801 - 2', '123 + 49']],
|
|
' 3801 123\n'
|
|
'- 2 + 49\n'
|
|
'------ -----',
|
|
'Expected different output when calling "arithmetic_arranger()" with ["3801 - 2", "123 + 49"]',
|
|
id='test_two_problems_arrangement1'),
|
|
pytest.param(
|
|
[['1 + 2', '1 - 9380']],
|
|
' 1 1\n'
|
|
'+ 2 - 9380\n'
|
|
'--- ------',
|
|
'Expected different output when calling "arithmetic_arranger()" with ["1 + 2", "1 - 9380"]',
|
|
id='test_two_problems_arrangement2'),
|
|
pytest.param(
|
|
[['3 + 855', '3801 - 2', '45 + 43', '123 + 49']],
|
|
' 3 3801 45 123\n'
|
|
'+ 855 - 2 + 43 + 49\n'
|
|
'----- ------ ---- -----',
|
|
'Expected different output when calling "arithmetic_arranger()" with ["3 + 855", "3801 - 2", "45 + 43", "123 + 49"]',
|
|
id='test_four_problems_arrangement'),
|
|
pytest.param(
|
|
[['11 + 4', '3801 - 2999', '1 + 2', '123 + 49', '1 - 9380']],
|
|
' 11 3801 1 123 1\n'
|
|
'+ 4 - 2999 + 2 + 49 - 9380\n'
|
|
'---- ------ --- ----- ------',
|
|
'Expected different output when calling "arithmetic_arranger()" with ["11 + 4", "3801 - 2999", "1 + 2", "123 + 49", "1 - 9380"]',
|
|
id='test_five_problems_arrangement'),
|
|
pytest.param(
|
|
[['44 + 815', '909 - 2', '45 + 43', '123 + 49',
|
|
'888 + 40', '653 + 87']],
|
|
'Error: Too many problems.',
|
|
'Expected calling "arithmetic_arranger()" with more than five problems to return "Error: Too many problems."',
|
|
id='test_too_many_problems'),
|
|
pytest.param(
|
|
[['3 / 855', '3801 - 2', '45 + 43', '123 + 49']],
|
|
"Error: Operator must be '+' or '-'.",
|
|
'''Expected calling "arithmetic_arranger()" with a problem that uses the "/" operator to return "Error: Operator must be '+' or '-'."''',
|
|
id='test_incorrect_operator'),
|
|
pytest.param(
|
|
[['24 + 85215', '3801 - 2', '45 + 43', '123 + 49']],
|
|
'Error: Numbers cannot be more than four digits.',
|
|
'Expected calling "arithmetic_arranger()" with a problem that has a number over 4 digits long to return "Error: Numbers cannot be more than four digits."',
|
|
id='test_too_many_digits'),
|
|
pytest.param(
|
|
[['98 + 3g5', '3801 - 2', '45 + 43', '123 + 49']],
|
|
'Error: Numbers must only contain digits.',
|
|
'Expected calling "arithmetic_arranger()" with a problem that contains a letter character in the number to return "Error: Numbers must only contain digits."',
|
|
id='test_only_digits'),
|
|
pytest.param(
|
|
[['3 + 855', '988 + 40'], True],
|
|
' 3 988\n'
|
|
'+ 855 + 40\n'
|
|
'----- -----\n'
|
|
' 858 1028',
|
|
'Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with ["3 + 855", "988 + 40"] and a second argument of `True`.',
|
|
id='test_two_problems_with_solutions'),
|
|
pytest.param(
|
|
[['32 - 698', '1 - 3801', '45 + 43', '123 + 49', '988 + 40'], True],
|
|
' 32 1 45 123 988\n'
|
|
'- 698 - 3801 + 43 + 49 + 40\n'
|
|
'----- ------ ---- ----- -----\n'
|
|
' -666 -3800 88 172 1028',
|
|
'Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with five arithmetic problems and a second argument of `True`.',
|
|
id='test_five_problems_with_solutions'),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
|
|
def test_template(arguments, expected_output, fail_message):
|
|
actual = arithmetic_arranger(*arguments)
|
|
assert actual == expected_output, fail_message
|