103 lines
3.6 KiB
Python
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() |