Add unknowns_analysis/tests/test_core.py

This commit is contained in:
Mika 2026-02-01 17:57:01 +00:00
parent 759b2f1f1d
commit b587046687

View file

@ -0,0 +1,73 @@
import pytest
import pandas as pd
from unknowns_analysis import core
@pytest.fixture
def simple_unknowns_data():
return [
{"window": 1, "unknowns": 3},
{"window": 2, "unknowns": 0},
{"window": 3, "unknowns": 2}
]
@pytest.fixture
def simple_warn_data():
return [
{"window": 1, "warn_rate": 0.3},
{"window": 2, "warn_rate": 0.2},
{"window": 3, "warn_rate": 0.25}
]
def test_analyze_unknowns_basic(simple_unknowns_data, simple_warn_data):
result = core.analyze_unknowns(simple_unknowns_data, simple_warn_data)
assert isinstance(result, dict), "Result must be a dict"
assert set(result.keys()) == {"total_unknowns", "warn_increases", "warn_stable"}
assert result["total_unknowns"] == sum(u["unknowns"] for u in simple_unknowns_data)
assert isinstance(result["warn_increases"], int)
assert isinstance(result["warn_stable"], int)
def test_analyze_unknowns_empty_inputs():
with pytest.raises(ValueError):
core.analyze_unknowns([], [])
def test_analyze_unknowns_invalid_inputs():
bad_unknowns = [{"window": 1, "no_field": 10}]
warn_data = [{"window": 1, "warn_rate": 0.2}]
with pytest.raises(ValueError):
core.analyze_unknowns(bad_unknowns, warn_data)
def test_result_model_structure():
data = {"total_unknowns": 10, "warn_increases": 2, "warn_stable": 1}
model = core.UnknownAnalysisResult(**data)
assert model.total_unknowns == 10
assert model.warn_increases == 2
assert model.warn_stable == 1
def test_integration_like_analysis(simple_unknowns_data, simple_warn_data):
result = core.analyze_unknowns(simple_unknowns_data, simple_warn_data)
df_unknowns = pd.DataFrame(simple_unknowns_data)
df_warns = pd.DataFrame(simple_warn_data)
total_unknowns = df_unknowns["unknowns"].sum()
assert result["total_unknowns"] == total_unknowns
assert 0 <= result["warn_increases"] <= len(df_warns)
assert 0 <= result["warn_stable"] <= len(df_warns)
def test_warn_increase_and_stable_logic(monkeypatch, simple_unknowns_data, simple_warn_data):
def fake_warn_data():
return [
{"window": 1, "warn_rate": 0.2},
{"window": 2, "warn_rate": 0.3},
{"window": 3, "warn_rate": 0.3},
]
result = core.analyze_unknowns(simple_unknowns_data, fake_warn_data())
assert isinstance(result, dict)
assert result["warn_increases"] >= 0
assert result["warn_stable"] >= 0