BMAD-METHOD/test_calculator.py

103 lines
3.6 KiB
Python

"""
Unit tests for Calculator class - TDD approach
Testing AC-001: Calculator Add Function
"""
import unittest
from calculator import Calculator
class TestCalculatorAdd(unittest.TestCase):
"""Test suite for Calculator.add method"""
def test_add_positive_integers(self):
"""TC-001: Test add with positive integers"""
calc = Calculator()
result = calc.add(2, 3)
self.assertEqual(result, 5, f"Expected 2 + 3 = 5, but got {result}")
def test_add_negative_numbers(self):
"""TC-002: Test add with negative numbers"""
calc = Calculator()
result = calc.add(-5, 3)
self.assertEqual(result, -2, f"Expected -5 + 3 = -2, but got {result}")
def test_add_floats(self):
"""TC-003: Test add with floats"""
calc = Calculator()
result = calc.add(1.5, 2.5)
self.assertEqual(result, 4.0, f"Expected 1.5 + 2.5 = 4.0, but got {result}")
def test_add_zeros(self):
"""TC-009: Test add with zero"""
calc = Calculator()
result = calc.add(0, 0)
self.assertEqual(result, 0, f"Expected 0 + 0 = 0, but got {result}")
def test_add_mixed_sign(self):
"""Test add with mixed positive and negative"""
calc = Calculator()
result = calc.add(10, -7)
self.assertEqual(result, 3, f"Expected 10 + (-7) = 3, but got {result}")
def test_add_large_numbers(self):
"""Test add with large numbers"""
calc = Calculator()
result = calc.add(1000000, 2000000)
self.assertEqual(result, 3000000, f"Expected 1000000 + 2000000 = 3000000, but got {result}")
def test_add_decimal_precision(self):
"""Test add maintains decimal precision"""
calc = Calculator()
result = calc.add(0.1, 0.2)
self.assertAlmostEqual(result, 0.3, places=4, msg=f"Expected 0.1 + 0.2 ≈ 0.3, but got {result}")
class TestCalculatorSubtract(unittest.TestCase):
"""Test suite for Calculator.subtract method"""
def test_subtract_positive_integers(self):
"""TC-004: Test subtract with positive integers"""
calc = Calculator()
result = calc.subtract(10, 3)
self.assertEqual(result, 7, f"Expected 10 - 3 = 7, but got {result}")
def test_subtract_resulting_negative(self):
"""TC-005: Test subtract resulting in negative"""
calc = Calculator()
result = calc.subtract(3, 10)
self.assertEqual(result, -7, f"Expected 3 - 10 = -7, but got {result}")
def test_subtract_floats(self):
"""TC-006: Test subtract with floats"""
calc = Calculator()
result = calc.subtract(5.5, 2.5)
self.assertEqual(result, 3.0, f"Expected 5.5 - 2.5 = 3.0, but got {result}")
def test_subtract_same_numbers(self):
"""TC-010: Test subtract with same numbers"""
calc = Calculator()
result = calc.subtract(5, 5)
self.assertEqual(result, 0, f"Expected 5 - 5 = 0, but got {result}")
def test_subtract_from_zero(self):
"""Test subtract from zero"""
calc = Calculator()
result = calc.subtract(0, 10)
self.assertEqual(result, -10, f"Expected 0 - 10 = -10, but got {result}")
def test_subtract_zero(self):
"""Test subtract zero from number"""
calc = Calculator()
result = calc.subtract(10, 0)
self.assertEqual(result, 10, f"Expected 10 - 0 = 10, but got {result}")
def test_subtract_large_numbers(self):
"""Test subtract with large numbers"""
calc = Calculator()
result = calc.subtract(1000000, 999999)
self.assertEqual(result, 1, f"Expected 1000000 - 999999 = 1, but got {result}")
if __name__ == '__main__':
unittest.main()