Files
sspai-100-hours-series-python/code/newsletter/N11/tests/test_accumulate_with_parametrize_mark.py

57 lines
1.3 KiB
Python

from typing import Tuple, TypeVar
import pytest
Number = TypeVar("Number", int, float)
def accumulate(*numbers: Tuple[Number]) -> Number:
result = 0
for n in numbers:
if not isinstance(n, (int, float)):
raise ValueError(f"{n} isn't a valid number value")
result += n
return result
def test_accumulate_without_mark():
numbers = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[-1, 0, 1, 0],
[10, 11, -11, -12],
]
expected = (10, 26, 0, 1)
for number, expect in zip(numbers, expected):
assert accumulate(*number) == expect
@pytest.mark.parametrize(
argnames="numbers,expected",
argvalues=[
([1, 2, 3, 4], 10),
([5, 6, 7, 8], 26),
([-1, 0, 1, 0], 0),
([10, 11, -11, -12], 1),
],
ids=list("abcd"),
)
def test_accumulate_with_parametrize_mark(numbers, expected):
assert accumulate(*numbers) == expected
@pytest.mark.parametrize(argnames="even_number", argvalues=[2, 4])
@pytest.mark.parametrize(argnames="odd_number", argvalues=[1, 3])
def test_accumulate_with_multiple_parametrize_mark(even_number, odd_number):
expected = {
"1+2": 3,
"1+4": 5,
"3+2": 5,
"3+4": 7,
}
expr = f"{odd_number}+{even_number}"
assert accumulate(odd_number, even_number) == expected[expr]