diff --git a/.gitignore b/.gitignore index 5d2b7d35..31a04239 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ **/*.pyc **/.DS_Store .coverage -venv/ \ No newline at end of file +**/venv diff --git a/src/calculator.py b/src/calculator.py index 5eb03460..55bd3828 100644 --- a/src/calculator.py +++ b/src/calculator.py @@ -10,3 +10,36 @@ # Multiplication: 8 # Division: 2 # + + +def addizione(num1: float, num2: float) -> float: + return num1 + num2 + + +def sottrazione(num1: float, num2: float) -> float: + return num1 - num2 + + +def moltiplicazione(num1: float, num2: float) -> float: + return num1 * num2 + + +def divisione(num1: float, num2: float) -> float | str: + if num2 == 0: + return "incalcolabile. Divisione per zero non consentita." + return num1 / num2 + + +def prendi_input() -> tuple[float, float]: + num1 = float(input("Inserisci il primo numero: ")) + num2 = float(input("Inserisci il secondo numero: ")) + return num1, num2 + + +if __name__ == "__main__": + a, b = prendi_input() + + print("La somma è", addizione(a, b)) + print("La differenza è", sottrazione(a, b)) + print("Il prodotto è", moltiplicazione(a, b)) + print("Il quoziente è", divisione(a, b)) diff --git a/tests/test_calculator.py b/tests/test_calculator.py new file mode 100644 index 00000000..52e90463 --- /dev/null +++ b/tests/test_calculator.py @@ -0,0 +1,105 @@ +from typing import List +import pytest +from src import calculator + + +parametri: List[dict] = [ + {"a": 1, "b": 2, "ris_addiz": 3, "ris_sottr": -1, "ris_molti": 2, "ris_divis": 0.5}, + { + "a": -1, + "b": 1, + "ris_addiz": 0, + "ris_sottr": -2, + "ris_molti": -1, + "ris_divis": -1, + }, + { + "a": -1, + "b": -2, + "ris_addiz": -3, + "ris_sottr": 1, + "ris_molti": 2, + "ris_divis": 0.5, + }, + {"a": 0, "b": 5, "ris_addiz": 5, "ris_sottr": -5, "ris_molti": 0, "ris_divis": 0}, + { + "a": 0, + "b": 0, + "ris_addiz": 0, + "ris_sottr": 0, + "ris_molti": 0, + "ris_divis": "incalcolabile. Divisione per zero non consentita.", + }, + { + "a": 1000, + "b": 999, + "ris_addiz": 1999, + "ris_sottr": 1, + "ris_molti": 999000, + "ris_divis": 1.001001001, + }, + { + "a": 1.5, + "b": 2.5, + "ris_addiz": 4.0, + "ris_sottr": -1, + "ris_molti": 3.75, + "ris_divis": 0.6, + }, + { + "a": -1.0, + "b": 1.0, + "ris_addiz": 0.0, + "ris_sottr": -2.0, + "ris_molti": -1.0, + "ris_divis": -1.0, + }, + { + "a": 0.1, + "b": 0.2, + "ris_addiz": 0.3, + "ris_sottr": -0.1, + "ris_molti": 0.02, + "ris_divis": 0.5, + }, + { + "a": 5, + "b": 0.5, + "ris_addiz": 5.5, + "ris_sottr": 4.5, + "ris_molti": 2.5, + "ris_divis": 10.0, + }, +] + + +@pytest.mark.parametrize("test", parametri) +def test_addizione(test: dict) -> float: + ris_attuale = calculator.addizione(test["a"], test["b"]) + assert test["ris_addiz"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_sottrazione(test: dict) -> float: + ris_attuale = calculator.sottrazione(test["a"], test["b"]) + assert test["ris_sottr"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_moltiplicazione(test: dict) -> float: + ris_attuale = calculator.moltiplicazione(test["a"], test["b"]) + assert test["ris_molti"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_divisione(test: dict) -> float: + ris_attuale = calculator.divisione(test["a"], test["b"]) + assert test["ris_divis"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_input(mocker, test: dict): + mocker.patch("builtins.input", side_effect=[float(test["a"]), float(test["b"])]) + a, b = calculator.prendi_input() + assert a == test["a"] + assert b == test["b"] diff --git a/tests/test_sum.py b/tests/test_sum.py deleted file mode 100644 index 4874e5c8..00000000 --- a/tests/test_sum.py +++ /dev/null @@ -1,7 +0,0 @@ -from src.sum import sum - - -def test_sum() -> None: - assert sum(3, 4) == 7 - assert sum(0, 0) == 0 - assert sum(1, 2) == 3