Add data_analysis/tests/test_core.py

This commit is contained in:
Mika 2026-03-05 15:48:02 +00:00
parent 408d62024a
commit 98642f49e4

View file

@ -0,0 +1,54 @@
import pytest
from data_analysis import core
def test_analyze_data_nominal_case():
data = [
{"context": "near_expiry", "pinned_status": "unpinned", "delta_t": -0.5, "warn": True},
{"context": "near_expiry", "pinned_status": "unpinned", "delta_t": 1.0, "warn": False},
{"context": "fresh", "pinned_status": "unpinned", "delta_t": 0.5, "warn": False},
{"context": "fresh", "pinned_status": "pinned", "delta_t": -0.2, "warn": True},
]
result = core.analyze_data(data)
assert isinstance(result, dict)
assert set(result.keys()) == {"near_expiry_count", "fresh_count", "warn_rate"}
assert result["near_expiry_count"] == 2
assert result["fresh_count"] == 1
total_records = len(data)
expected_warn_rate = 2 / total_records
assert pytest.approx(result["warn_rate"], rel=1e-3) == expected_warn_rate
def test_analyze_data_empty_input():
result = core.analyze_data([])
assert isinstance(result, dict)
assert result["near_expiry_count"] == 0
assert result["fresh_count"] == 0
assert result["warn_rate"] == 0.0
def test_analyze_data_invalid_structure():
bad_data = [{"context": "near_expiry", "delta_t": -1.0}] # missing keys
with pytest.raises((KeyError, ValueError, TypeError)):
core.analyze_data(bad_data)
def test_analyze_data_delta_t_negative_detection():
data = [
{"context": "near_expiry", "pinned_status": "unpinned", "delta_t": -0.3, "warn": False},
{"context": "fresh", "pinned_status": "unpinned", "delta_t": -0.5, "warn": True},
]
result = core.analyze_data(data)
# both are unpinned, so should register counts
assert result["near_expiry_count"] == 1
assert result["fresh_count"] == 1
expected_warn_rate = 1 / 2
assert pytest.approx(result["warn_rate"], rel=1e-3) == expected_warn_rate
def test_analyze_data_type_validation():
data = [
{"context": "fresh", "pinned_status": "unpinned", "delta_t": "NaN", "warn": True}
]
with pytest.raises((TypeError, ValueError)):
core.analyze_data(data)