Skip to content
Open
120 changes: 120 additions & 0 deletions test_calculator.py
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test patterns you cant divide like 10 / 3 too

Copy link
Contributor

@gitauto-ai gitauto-ai bot Feb 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved your feedback! Looks good?

Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# pylint: disable=redefined-outer-name, unused-argument
from unittest.mock import patch

from calculator import add, divide, main, multiply, subtract

import pytest


class TestAdd:
def test_positive_numbers(self):
assert add(2, 3) == 5

def test_negative_numbers(self):
assert add(-1, -2) == -3

def test_mixed_sign(self):
assert add(-1, 3) == 2

def test_zeros(self):
assert add(0, 0) == 0

def test_floats(self):
assert add(1.5, 2.5) == 4.0


class TestSubtract:
def test_positive_numbers(self):
assert subtract(5, 3) == 2

def test_negative_result(self):
assert subtract(3, 5) == -2

def test_zeros(self):
assert subtract(0, 0) == 0

def test_floats(self):
assert subtract(5.5, 2.5) == 3.0


class TestMultiply:
def test_positive_numbers(self):
assert multiply(3, 4) == 12

def test_by_zero(self):
assert multiply(5, 0) == 0

def test_negative_numbers(self):
assert multiply(-2, -3) == 6

def test_mixed_sign(self):
assert multiply(-2, 3) == -6

def test_floats(self):
assert multiply(2.5, 4) == 10.0


class TestDivide:
def test_even_division(self):
assert divide(10, 2) == 5.0

def test_fractional_result(self):
assert divide(7, 2) == 3.5

def test_repeating_decimal(self):
assert divide(10, 3) == pytest.approx(10 / 3)

def test_divide_by_zero_raises(self):
with pytest.raises(ValueError, match="Cannot divide by zero"):
divide(1, 0)

def test_negative_numbers(self):
assert divide(-6, 3) == -2.0

def test_zero_numerator(self):
assert divide(0, 5) == 0.0


class TestMain:
@patch("builtins.input", side_effect=["5", "+", "3"])
@patch("builtins.print")
def test_addition_operation(self, mock_print, _mock_input):
main()
mock_print.assert_any_call("5.0 + 3.0 = 8.0")

@patch("builtins.input", side_effect=["10", "-", "4"])
@patch("builtins.print")
def test_subtraction_operation(self, mock_print, _mock_input):
main()
mock_print.assert_any_call("10.0 - 4.0 = 6.0")

@patch("builtins.input", side_effect=["3", "*", "7"])
@patch("builtins.print")
def test_multiplication_operation(self, mock_print, _mock_input):
main()
mock_print.assert_any_call("3.0 * 7.0 = 21.0")

@patch("builtins.input", side_effect=["8", "/", "2"])
@patch("builtins.print")
def test_division_operation(self, mock_print, _mock_input):
main()
mock_print.assert_any_call("8.0 / 2.0 = 4.0")

@patch("builtins.input", side_effect=["10", "/", "3"])
@patch("builtins.print")
def test_division_repeating_decimal_operation(self, mock_print, _mock_input):
main()
mock_print.assert_any_call(f"10.0 / 3.0 = {10.0 / 3.0}")

@patch("builtins.input", side_effect=["5", "%", "3"])
@patch("builtins.print")
def test_unknown_operation(self, mock_print, _mock_input):
main()
mock_print.assert_any_call("Unknown operation: %")

@patch("builtins.input", side_effect=["5", "+", "3"])
@patch("builtins.print")
def test_prints_header(self, mock_print, _mock_input):
main()
mock_print.assert_any_call("Simple Calculator")
mock_print.assert_any_call("Operations: +, -, *, /")