Add artifact.metrics_analysis/tests/test_core.py

This commit is contained in:
Mika 2026-04-06 16:12:07 +00:00
parent 8dd26f8a9f
commit 95408f2b33

View file

@ -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())