Skip to content

Commit

Permalink
fixes tests for z-score
Browse files Browse the repository at this point in the history
  • Loading branch information
CSchoel committed Mar 24, 2024
1 parent d2ecaf0 commit ac88b3a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 9 deletions.
11 changes: 8 additions & 3 deletions exercises/2024/ChatGPT/z_score/sol/z_score.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
from typing import List
import math


class ZScoreCalculator:
def __init__(self, data: List[float]):
self.mean = sum(data) / len(data) if data else 0
self.std_dev = math.sqrt(sum((x - self.mean) ** 2 for x in data) / len(data)) if data else 0
self.mean = sum(data) / len(data) if data else math.nan
self.std_dev = (
math.sqrt(sum((x - self.mean) ** 2 for x in data) / len(data))
if data
else math.nan
)

def calculate_z_score(self, x: float) -> float:
return (x - self.mean) / self.std_dev if self.std_dev != 0 else 0
return (x - self.mean) / self.std_dev if self.std_dev != 0 else 0
19 changes: 13 additions & 6 deletions exercises/2024/ChatGPT/z_score/test/test_z_score.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
import unittest
import math

from z_score import ZScoreCalculator


class TestZScoreCalculator(unittest.TestCase):

def testZScoreCalculator(self):
calculator = ZScoreCalculator([10, 20, 30, 40, 50])
self.assertAlmostEqual(0.0, calculator.calculate_z_score(30), places=5)
self.assertAlmostEqual(1.414213562373095, calculator.calculate_z_score(55), places=5)
self.assertAlmostEqual(-1.414213562373095, calculator.calculate_z_score(5), places=5)
self.assertAlmostEqual(
1.7677669529663687, calculator.calculate_z_score(55), places=5
)
self.assertAlmostEqual(
-1.7677669529663687, calculator.calculate_z_score(5), places=5
)

def testZScoreCalculatorEmpty(self):
calculator = ZScoreCalculator([])
self.assertEqual(0, calculator.calculate_z_score(10))
self.assertTrue(math.isnan(calculator.calculate_z_score(10)))

def testZScoreCalculatorSingleElement(self):
calculator = ZScoreCalculator([5])
Expand All @@ -22,5 +28,6 @@ def testZScoreCalculatorRepeatedValues(self):
calculator = ZScoreCalculator([5, 5, 5, 5, 5])
self.assertEqual(0, calculator.calculate_z_score(5))

if __name__ == '__main__':
unittest.main()

if __name__ == "__main__":
unittest.main()

0 comments on commit ac88b3a

Please sign in to comment.