From b587046687e089cb87119f6aad9be1e067a857a0 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 1 Feb 2026 17:57:01 +0000 Subject: [PATCH] Add unknowns_analysis/tests/test_core.py --- unknowns_analysis/tests/test_core.py | 73 ++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 unknowns_analysis/tests/test_core.py diff --git a/unknowns_analysis/tests/test_core.py b/unknowns_analysis/tests/test_core.py new file mode 100644 index 0000000..2bff819 --- /dev/null +++ b/unknowns_analysis/tests/test_core.py @@ -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 \ No newline at end of file