diff --git a/CHANGELOG.md b/CHANGELOG.md index 61ee1d8..d6dc151 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [Unreleased] + +### Added + +- Added `divide(a, b)` function in `functions.py` to perform division. +- Added `multiply(a, b)` function in `functions.py` to perform multiplication. + + ## [1.0.0] - 2025-05-11 ### Added diff --git a/functions.py b/functions.py index d33c9bb..89202a7 100644 --- a/functions.py +++ b/functions.py @@ -4,4 +4,12 @@ def add(a, b): def minus(a, b): """Subtract b from a.""" - return a - b \ No newline at end of file + return a - b + +def divide(a, b): + """Divide a by b.""" + return a / b + +def multiply(a, b): + """Multiply two numbers""" + return a * b diff --git a/tests/test_cases.json b/tests/test_cases.json new file mode 100644 index 0000000..eeed81b --- /dev/null +++ b/tests/test_cases.json @@ -0,0 +1,12 @@ +[ + {"input": {"a": 2, "b": 3}, "expected": 6}, + {"input": {"a": -1, "b": 5}, "expected": -5}, + {"input": {"a": 0, "b": 100}, "expected": 0}, + {"input": {"a": 7, "b": -3}, "expected": -21}, + {"input": {"a": -4, "b": -2}, "expected": 8}, + {"input": {"a": 1, "b": 0}, "expected": 0}, + {"input": {"a": 123, "b": 456}, "expected": 56088}, + {"input": {"a": 10, "b": 10}, "expected": 100}, + {"input": {"a": 0, "b": 0}, "expected": 0}, + {"input": {"a": 999, "b": -1}, "expected": 999} +] \ No newline at end of file diff --git a/tests/test_cases_divide.json b/tests/test_cases_divide.json new file mode 100644 index 0000000..1064607 --- /dev/null +++ b/tests/test_cases_divide.json @@ -0,0 +1,12 @@ +[ + {"input": {"a": 10, "b": 2}, "expected": 5}, + {"input": {"a": -10, "b": 2}, "expected": -5}, + {"input": {"a": 0, "b": 1}, "expected": 0}, + {"input": {"a": 10, "b": -2}, "expected": -5}, + {"input": {"a": 1, "b": 3}, "expected": 0.3333333333333333}, + {"input": {"a": 100, "b": 10}, "expected": 10}, + {"input": {"a": -100, "b": -10}, "expected": 10}, + {"input": {"a": 7, "b": 7}, "expected": 1}, + {"input": {"a": 0, "b": 10}, "expected": 0}, + {"input": {"a": 10, "b": 0}, "expected_error": "ZeroDivisionError"} +] \ No newline at end of file diff --git a/tests/test_code_divide.py b/tests/test_code_divide.py new file mode 100644 index 0000000..9c5214b --- /dev/null +++ b/tests/test_code_divide.py @@ -0,0 +1,25 @@ +import unittest +import json +from functions import divide + +class TestDivideFunction(unittest.TestCase): + def setUp(self): + # JSON 파일에서 테스트 케이스 로드 + with open("tests/test_cases_divide.json", "r") as f: + self.test_cases = json.load(f) + + def test_divide(self): + for case in self.test_cases: + a = case["input"]["a"] + b = case["input"]["b"] + + if "expected" in case: + with self.subTest(a=a, b=b): + self.assertAlmostEqual(divide(a, b), case["expected"], places=7) + elif "expected_error" in case: + with self.subTest(a=a, b=b): + with self.assertRaises(eval(case["expected_error"])): + divide(a, b) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/tests/test_multiply.py b/tests/test_multiply.py new file mode 100644 index 0000000..672aea9 --- /dev/null +++ b/tests/test_multiply.py @@ -0,0 +1,18 @@ +import json +import unittest +from functions import multiply + +class TestMultiplyFunction(unittest.TestCase): + def test_multiply_cases(self): + with open("tests/test_cases.json", "r") as f: + test_cases = json.load(f) + + for case in test_cases: + a = case["input"]["a"] + b = case["input"]["b"] + expected = case["expected"] + with self.subTest(a=a, b=b, expected=expected): + self.assertEqual(multiply(a, b), expected) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file