diff --git a/data_analysis/tests/test_core.py b/data_analysis/tests/test_core.py new file mode 100644 index 0000000..16394ef --- /dev/null +++ b/data_analysis/tests/test_core.py @@ -0,0 +1,55 @@ +import pytest +from datetime import datetime, timedelta +from data_analysis import core + + +@pytest.fixture +def sample_run_data(): + base_time = datetime(2024, 1, 1, 12, 0, 0) + return [ + { + 'run_id': 'r1', + 'timestamp': base_time, + 'delta_t': 0.5, + 'expiring_at': base_time + timedelta(hours=1) + }, + { + 'run_id': 'r2', + 'timestamp': base_time + timedelta(seconds=5), + 'delta_t': -0.2, + 'expiring_at': base_time + timedelta(hours=2) + }, + { + 'run_id': 'r3', + 'timestamp': base_time + timedelta(seconds=10), + 'delta_t': 0.0, + 'expiring_at': base_time + timedelta(hours=3) + } + ] + + +def test_analyze_runs_structure(sample_run_data): + result = core.analyze_runs(sample_run_data) + assert isinstance(result, dict), 'Result must be a dict' + expected_keys = {'total_runs', 'negative_dt_count', 'negative_dt_ratio'} + for key in expected_keys: + assert key in result, f'Missing key: {key}' + + +def test_analyze_runs_negative_count(sample_run_data): + result = core.analyze_runs(sample_run_data) + assert result['negative_dt_count'] == 1 + assert result['total_runs'] == 3 + assert result['negative_dt_ratio'] == pytest.approx(1/3, rel=1e-3) + + +def test_analyze_runs_empty_list(): + result = core.analyze_runs([]) + assert result['total_runs'] == 0 + assert result['negative_dt_count'] == 0 + assert result['negative_dt_ratio'] == 0.0 + + +def test_analyze_runs_type_validation(): + with pytest.raises((TypeError, AssertionError)): + core.analyze_runs('invalid_input')