diff --git a/artifact.metrics_analysis/tests/test_core.py b/artifact.metrics_analysis/tests/test_core.py new file mode 100644 index 0000000..2166111 --- /dev/null +++ b/artifact.metrics_analysis/tests/test_core.py @@ -0,0 +1,58 @@ +import pytest +from artifact_metrics_analysis import core + +@pytest.fixture +def card_data_40(): + return { + 'retry_tail_p99': 120.5, + 'band_width': 45.0 + } + + +@pytest.fixture +def card_data_42(): + return { + 'retry_tail_p99': 130.2, + 'band_width': 50.5 + } + + +def test_analyze_metrics_basic(card_data_40, card_data_42): + result = core.analyze_metrics(card_data_40, card_data_42) + assert isinstance(result, core.MetricResults) + + result_dict = result.to_dict() + assert pytest.approx(result_dict['retry_tail_p99'], rel=1e-5) == 130.2 + assert pytest.approx(result_dict['band_width'], rel=1e-5) == 50.5 + assert pytest.approx(result_dict['delta_band_width'], rel=1e-5) == 5.5 + + +def test_analyze_metrics_delta_negative(card_data_40, card_data_42): + data42 = {**card_data_42, 'band_width': 40.0} + result = core.analyze_metrics(card_data_40, data42) + result_dict = result.to_dict() + # delta_band_width = 40.0 - 45.0 = -5.0 + assert result_dict['delta_band_width'] == pytest.approx(-5.0) + + +def test_metricresults_to_dict_structure(): + m = core.MetricResults(100.0, 40.0, -2.0) + d = m.to_dict() + assert set(d.keys()) == {'retry_tail_p99', 'band_width', 'delta_band_width'} + assert d['retry_tail_p99'] == 100.0 + assert d['band_width'] == 40.0 + assert d['delta_band_width'] == -2.0 + + +def test_invalid_input_handling(): + # Missing keys should raise KeyError or ValueError + bad_40 = {'retry_tail_p99': 50.0} + bad_42 = {'band_width': 10.0} + with pytest.raises((KeyError, ValueError, TypeError)): + core.analyze_metrics(bad_40, bad_42) + + +def test_type_integrity(card_data_40, card_data_42): + result = core.analyze_metrics(card_data_40, card_data_42) + d = result.to_dict() + assert all(isinstance(v, (float, int)) for v in d.values())