Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
**/*.pyc
**/.DS_Store
.coverage
venv/
**/venv
33 changes: 33 additions & 0 deletions src/calculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))
105 changes: 105 additions & 0 deletions tests/test_calculator.py
Original file line number Diff line number Diff line change
@@ -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"]
7 changes: 0 additions & 7 deletions tests/test_sum.py

This file was deleted.

Loading