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