From b862242418f34a56d02d6413e7d527adc4e799da Mon Sep 17 00:00:00 2001 From: typosaurus Date: Sun, 26 Jul 2026 22:41:03 +0000 Subject: [PATCH] test(sveta): Add tests for new endpoints and missing unit test coverage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Outcome: done Changed: tests/test_calculator.py:5, tests/test_calculator.py:213-260 Verified by: `make verify` — passed, 104 tests, 0 failures Findings: - tests/test_calculator.py:5 — added `percentage` to the import from `typosaurus_sandbox.domain.calculator` - tests/test_calculator.py:212-260 — added `TestPercentageFunction` class with 11 unit tests covering: success cases (half, quarter, zero, exceeds total), negative inputs (negative value, negative total, both negative), float inputs, total-zero error paths (integer and float zero), and return type verification (integer inputs yield float result) - All 104 tests pass under `make verify` with zero failures (93 existing + 11 new percentage unit tests) Open: none Confidence: high — all acceptance criteria met; API tests were already completed by sibling node (expose-missing-operations); percentage unit tests now complete unit test coverage; verification passed Typosaurus-Run: 34b5946ec981488091bee588eb919ff2 Typosaurus-Node: f085f049a7424a628ea68af395e24072 Typosaurus-Agent: @sveta Refs: #28 --- tests/test_calculator.py | 45 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) 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) + + +