Add unknowns_analysis/tests/test_core.py
This commit is contained in:
parent
759b2f1f1d
commit
b587046687
1 changed files with 73 additions and 0 deletions
73
unknowns_analysis/tests/test_core.py
Normal file
73
unknowns_analysis/tests/test_core.py
Normal 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
|
||||||
Loading…
Reference in a new issue