Add artifact.1/tests/test_core.py

This commit is contained in:
Mika 2026-03-04 15:16:38 +00:00
parent bb7a2b4b12
commit 2408cea66d

View file

@ -0,0 +1,64 @@
import pytest
from typing import List, Dict
from src.artifact_1 import core
class TestResult:
def __init__(self, group: str, pinned_status: str, warn_rate: float, unknown_rate: float, delta_t_rate: float):
self.group = group
self.pinned_status = pinned_status
self.warn_rate = warn_rate
self.unknown_rate = unknown_rate
self.delta_t_rate = delta_t_rate
def make_sample_data() -> List[TestResult]:
return [
TestResult('A', 'pinned', 0.1, 0.05, 0.02),
TestResult('A', 'pinned', 0.2, 0.1, 0.03),
TestResult('A', 'unpinned', 0.3, 0.15, 0.04),
TestResult('B', 'pinned', 0.15, 0.07, 0.01),
TestResult('B', 'unpinned', 0.35, 0.12, 0.08),
TestResult('B', 'unpinned', 0.4, 0.18, 0.06),
]
def test_analyze_ab_data_structure():
data = make_sample_data()
result = core.analyze_ab_data(data)
assert isinstance(result, dict)
# groups should contain A and B, with pinned/unpinned stratum inside
for group_key in ['A', 'B']:
assert group_key in result
assert 'pinned' in result[group_key] or 'unpinned' in result[group_key]
def test_aggregation_values():
data = make_sample_data()
result = core.analyze_ab_data(data)
# A-pinned
a_pinned = result['A']['pinned']
assert pytest.approx(a_pinned['warn_rate_mean'], rel=1e-6) == (0.1 + 0.2) / 2
assert pytest.approx(a_pinned['unknown_rate_mean'], rel=1e-6) == (0.05 + 0.1) / 2
assert pytest.approx(a_pinned['delta_t_rate_mean'], rel=1e-6) == (0.02 + 0.03) / 2
# B-unpinned
b_unpinned = result['B']['unpinned']
assert pytest.approx(b_unpinned['warn_rate_mean'], rel=1e-6) == (0.35 + 0.4) / 2
assert pytest.approx(b_unpinned['unknown_rate_mean'], rel=1e-6) == (0.12 + 0.18) / 2
assert pytest.approx(b_unpinned['delta_t_rate_mean'], rel=1e-6) == (0.08 + 0.06) / 2
def test_invalid_input_raises():
# Input validation should fail for non-list input
with pytest.raises((TypeError, ValueError)):
core.analyze_ab_data('invalid_input')
# Input validation should fail for missing attributes
class Bad:
def __init__(self):
self.group = 'A'
bad_data = [Bad()]
with pytest.raises((AttributeError, ValueError)):
core.analyze_ab_data(bad_data)