Merge pull request 'feat: Add a variance function to the calculator' (#20) from typosaurus/19-add-a-variance-function-to-the-calculator into main

Reviewed-on: #20
This commit is contained in:
typosaurus 2026-07-26 19:09:52 +02:00
commit 9bc1788ae2
2 changed files with 46 additions and 1 deletions

View File

@ -1,5 +1,8 @@
# retoor <retoor@molodetz.nl>
from typing import Sequence
def add(left: int, right: int) -> int:
return left + right
@ -20,3 +23,12 @@ def clamp(value: int, low: int, high: int) -> int:
def clamp_to_byte(value: int) -> int:
return max(0, min(255, value))
def variance(values: Sequence[float]) -> float:
if not values:
raise ValueError
mean = sum(values) / len(values)
return sum((x - mean) ** 2 for x in values) / len(values)

View File

@ -3,7 +3,7 @@
import math
import unittest
from src.calculator import clamp
from src.calculator import clamp, variance
class TestClampFunction(unittest.TestCase):
@ -61,3 +61,36 @@ class TestClampFunction(unittest.TestCase):
def test_nan_returns_nan(self) -> None:
result = clamp(math.nan, 0, 10)
self.assertTrue(math.isnan(result))
class TestVarianceFunction(unittest.TestCase):
def test_empty_list_raises_value_error(self) -> None:
with self.assertRaises(ValueError):
variance([])
def test_empty_tuple_raises_value_error(self) -> None:
with self.assertRaises(ValueError):
variance(())
def test_single_element_returns_zero(self) -> None:
self.assertEqual(variance([42.0]), 0.0)
def test_constant_values_return_zero_variance(self) -> None:
self.assertEqual(variance([1.0, 1.0, 1.0]), 0.0)
def test_population_variance_of_known_set(self) -> None:
self.assertEqual(variance([1, 2, 3, 4, 5]), 2.0)
def test_two_element_variance(self) -> None:
self.assertEqual(variance([0, 2]), 1.0)
def test_integer_inputs_return_float(self) -> None:
result = variance([10, 20, 30])
self.assertIsInstance(result, float)
self.assertEqual(result, 200.0 / 3.0)
def test_tuple_input_returns_variance(self) -> None:
self.assertEqual(variance((1, 2, 3, 4, 5)), 2.0)