Add data_analysis/tests/test_core.py
This commit is contained in:
parent
408d62024a
commit
98642f49e4
1 changed files with 54 additions and 0 deletions
54
data_analysis/tests/test_core.py
Normal file
54
data_analysis/tests/test_core.py
Normal 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)
|
||||
Loading…
Reference in a new issue