diff --git a/tests/test_calculator.py b/tests/test_calculator.py index d90f99d..94fa811 100644 --- a/tests/test_calculator.py +++ b/tests/test_calculator.py @@ -3,7 +3,7 @@ import math import unittest -from typosaurus_sandbox.domain.calculator import add, average, clamp, clamp_to_byte, median, subtract, variance +from typosaurus_sandbox.domain.calculator import add, average, clamp, clamp_to_byte, median, percentage, subtract, variance class TestAddFunction(unittest.TestCase): @@ -181,3 +181,46 @@ class TestVarianceFunction(unittest.TestCase): def test_tuple_input_returns_variance(self) -> None: self.assertEqual(variance((1, 2, 3, 4, 5)), 2.0) + +class TestPercentageFunction(unittest.TestCase): + + def test_half_returns_50(self) -> None: + self.assertEqual(percentage(50, 100), 50.0) + + def test_quarter_returns_25(self) -> None: + self.assertEqual(percentage(25, 100), 25.0) + + def test_zero_value_returns_zero(self) -> None: + self.assertEqual(percentage(0, 100), 0.0) + + def test_value_exceeds_total(self) -> None: + self.assertEqual(percentage(150, 100), 150.0) + + def test_negative_value(self) -> None: + self.assertEqual(percentage(-50, 100), -50.0) + + def test_negative_total(self) -> None: + self.assertEqual(percentage(50, -100), -50.0) + + def test_both_negative(self) -> None: + self.assertEqual(percentage(-50, -100), 50.0) + + def test_float_inputs(self) -> None: + result = percentage(33.0, 100.0) + self.assertAlmostEqual(result, 33.0) + + def test_total_zero_raises_value_error(self) -> None: + with self.assertRaises(ValueError): + percentage(50, 0) + + def test_total_zero_float_raises_value_error(self) -> None: + with self.assertRaises(ValueError): + percentage(50.0, 0.0) + + def test_integer_inputs_return_float(self) -> None: + result = percentage(1, 4) + self.assertIsInstance(result, float) + self.assertEqual(result, 25.0) + + +