Add run_analysis/tests/test_core.py
This commit is contained in:
parent
29cad48f8b
commit
0269cf3831
1 changed files with 65 additions and 0 deletions
65
run_analysis/tests/test_core.py
Normal file
65
run_analysis/tests/test_core.py
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
import json
|
||||||
|
import pytest
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import run_analysis.core as core
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def sample_run_data():
|
||||||
|
# Representative dataset including negative and non-negative visibility_lag
|
||||||
|
return [
|
||||||
|
{"corr_id": "a1", "expires_at_dist_hours": 0.5, "visibility_lag": -2.3},
|
||||||
|
{"corr_id": "b2", "expires_at_dist_hours": 1.0, "visibility_lag": 0.0},
|
||||||
|
{"corr_id": "c3", "expires_at_dist_hours": 2.0, "visibility_lag": -0.5},
|
||||||
|
{"corr_id": "d4", "expires_at_dist_hours": 3.5, "visibility_lag": 1.2}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_analyze_run_data_basic(sample_run_data):
|
||||||
|
result = core.analyze_run_data(sample_run_data)
|
||||||
|
|
||||||
|
assert isinstance(result, dict), "Result should be a dictionary"
|
||||||
|
assert "total_count" in result
|
||||||
|
assert "negative_dt_count" in result
|
||||||
|
assert "negative_corr_ids" in result
|
||||||
|
|
||||||
|
assert result["total_count"] == len(sample_run_data)
|
||||||
|
assert result["negative_dt_count"] == 2, "Should detect exactly two negative cases"
|
||||||
|
assert set(result["negative_corr_ids"]) == {"a1", "c3"}
|
||||||
|
|
||||||
|
# optional mean values should be numbers or None
|
||||||
|
for key in ["mean_expires_at_dist_hours_neg", "mean_visibility_lag_neg"]:
|
||||||
|
val = result.get(key)
|
||||||
|
assert val is None or isinstance(val, (int, float))
|
||||||
|
|
||||||
|
|
||||||
|
def test_analyze_run_data_no_negatives():
|
||||||
|
data = [
|
||||||
|
{"corr_id": "p1", "expires_at_dist_hours": 0.1, "visibility_lag": 0.2},
|
||||||
|
{"corr_id": "p2", "expires_at_dist_hours": 5.0, "visibility_lag": 1.0}
|
||||||
|
]
|
||||||
|
result = core.analyze_run_data(data)
|
||||||
|
assert result["negative_dt_count"] == 0
|
||||||
|
assert result["negative_corr_ids"] == []
|
||||||
|
|
||||||
|
|
||||||
|
def test_analyze_run_data_invalid_input():
|
||||||
|
# Missing field should trigger validation error
|
||||||
|
invalid_data = [{"corr_id": "z1", "expires_at_dist_hours": 1.0}]
|
||||||
|
with pytest.raises((KeyError, AssertionError, TypeError)):
|
||||||
|
core.analyze_run_data(invalid_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_analyze_run_data_from_json_file(tmp_path):
|
||||||
|
data_path = tmp_path / "test_run_data.json"
|
||||||
|
input_data = [
|
||||||
|
{"corr_id": "x1", "expires_at_dist_hours": 2.0, "visibility_lag": -1.0},
|
||||||
|
{"corr_id": "x2", "expires_at_dist_hours": 3.0, "visibility_lag": 2.0}
|
||||||
|
]
|
||||||
|
data_path.write_text(json.dumps(input_data))
|
||||||
|
|
||||||
|
run_data = json.loads(data_path.read_text())
|
||||||
|
result = core.analyze_run_data(run_data)
|
||||||
|
|
||||||
|
assert result["negative_dt_count"] == 1
|
||||||
|
assert result["negative_corr_ids"] == ["x1"]
|
||||||
Loading…
Reference in a new issue