diff --git a/Makefile b/Makefile index 6c607e1..0ddaaf7 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,2 @@ verify: - @python3 -m compileall -q src && echo "verification passed" + @python3 -m compileall -q src tests && python3 -m unittest discover -s tests -q && echo "verification passed" diff --git a/src/__pycache__/calculator.cpython-315.pyc b/src/__pycache__/calculator.cpython-315.pyc new file mode 100644 index 0000000..188bff0 Binary files /dev/null and b/src/__pycache__/calculator.cpython-315.pyc differ diff --git a/src/calculator.py b/src/calculator.py index e41739a..983e401 100644 --- a/src/calculator.py +++ b/src/calculator.py @@ -6,3 +6,13 @@ def add(left: int, right: int) -> int: def subtract(left: int, right: int) -> int: return left - right + + +def multiply(left: int, right: int) -> int: + return left * right + + +def divide(left: int, right: int) -> int: + if right == 0: + raise ValueError('division by zero') + return left // right diff --git a/tests/__pycache__/test_calculator.cpython-315.pyc b/tests/__pycache__/test_calculator.cpython-315.pyc new file mode 100644 index 0000000..328beb2 Binary files /dev/null and b/tests/__pycache__/test_calculator.cpython-315.pyc differ diff --git a/tests/test_calculator.py b/tests/test_calculator.py new file mode 100644 index 0000000..f05e23b --- /dev/null +++ b/tests/test_calculator.py @@ -0,0 +1,58 @@ +# retoor + +import unittest + +from src.calculator import add, subtract, multiply, divide + + +class TestCalculator(unittest.TestCase): + + def test_add(self) -> None: + self.assertEqual(add(2, 3), 5) + + def test_subtract(self) -> None: + self.assertEqual(subtract(5, 3), 2) + + def test_multiply_positive(self) -> None: + self.assertEqual(multiply(2, 3), 6) + + def test_multiply_negative_left(self) -> None: + self.assertEqual(multiply(-2, 3), -6) + + def test_multiply_negative_right(self) -> None: + self.assertEqual(multiply(2, -3), -6) + + def test_multiply_both_negative(self) -> None: + self.assertEqual(multiply(-2, -3), 6) + + def test_multiply_zero_left(self) -> None: + self.assertEqual(multiply(0, 5), 0) + + def test_multiply_zero_right(self) -> None: + self.assertEqual(multiply(5, 0), 0) + + def test_multiply_both_zero(self) -> None: + self.assertEqual(multiply(0, 0), 0) + + def test_divide_positive(self) -> None: + self.assertEqual(divide(6, 3), 2) + + def test_divide_negative_left(self) -> None: + self.assertEqual(divide(-6, 3), -2) + + def test_divide_negative_right(self) -> None: + self.assertEqual(divide(6, -3), -2) + + def test_divide_both_negative(self) -> None: + self.assertEqual(divide(-6, -3), 2) + + def test_divide_floor(self) -> None: + self.assertEqual(divide(7, 3), 2) + + def test_divide_zero_numerator(self) -> None: + self.assertEqual(divide(0, 5), 0) + + def test_divide_by_zero(self) -> None: + with self.assertRaises(ValueError) as cm: + divide(5, 0) + self.assertEqual(str(cm.exception), 'division by zero')