From 919997538d3b3f5f87617ab30f3409490513aae8 Mon Sep 17 00:00:00 2001 From: Mika Date: Sat, 14 Mar 2026 17:17:12 +0000 Subject: [PATCH] Add stability_analysis/tests/test_core.py --- stability_analysis/tests/test_core.py | 57 +++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 stability_analysis/tests/test_core.py diff --git a/stability_analysis/tests/test_core.py b/stability_analysis/tests/test_core.py new file mode 100644 index 0000000..425ed2e --- /dev/null +++ b/stability_analysis/tests/test_core.py @@ -0,0 +1,57 @@ +import pytest +import pandas as pd +import numpy as np +from stability_analysis.core import analyze_data + +@pytest.fixture +def sample_data(): + return [ + {"expires_at_dist_hours": 1.5, "retry_total_overhead_ms": 10}, + {"expires_at_dist_hours": 1.6, "retry_total_overhead_ms": 11}, + {"expires_at_dist_hours": 5.2, "retry_total_overhead_ms": 150}, # outlier + {"expires_at_dist_hours": 1.4, "retry_total_overhead_ms": 9}, + {"expires_at_dist_hours": 1.5, "retry_total_overhead_ms": 10} + ] + + +def test_analyze_data_returns_expected_structure(sample_data): + result = analyze_data(sample_data) + assert isinstance(result, dict) + for key in ("stable_cluster", "outlier_counts", "patterns"): + assert key in result, f"Missing key: {key}" + + assert isinstance(result["stable_cluster"], list) + assert isinstance(result["outlier_counts"], dict) + assert isinstance(result["patterns"], list) + + +def test_outlier_detection(sample_data): + result = analyze_data(sample_data) + assert any(count > 0 for count in result["outlier_counts"].values()), "Outliers should be detected" + + +def test_stable_cluster_identification(sample_data): + result = analyze_data(sample_data) + assert len(result["stable_cluster"]) >= 1, "Should identify at least one stable cluster" + + +def test_pattern_recognition(sample_data): + result = analyze_data(sample_data) + # Should return some patterns based on grouped similarities + assert isinstance(result["patterns"], list) + assert all(isinstance(p, str) for p in result["patterns"]) + + +def test_invalid_input_raises(): + with pytest.raises((TypeError, ValueError)): + analyze_data(None) + with pytest.raises((TypeError, ValueError)): + analyze_data([{"expires_at_dist_hours": "NaN"}]) + + +def test_edge_case_empty_input(): + result = analyze_data([]) + assert isinstance(result, dict) + assert result["stable_cluster"] == [] + assert result["outlier_counts"] == {} + assert result["patterns"] == [] \ No newline at end of file