feat: refactor project
This commit is contained in:
46
backend/tests/test_elo.py
Normal file
46
backend/tests/test_elo.py
Normal file
@@ -0,0 +1,46 @@
|
||||
"""Tests for the ELO calculation module."""
|
||||
|
||||
import pytest
|
||||
|
||||
from app.elo import calculate_elo
|
||||
|
||||
|
||||
class TestCalculateElo:
|
||||
"""Tests for calculate_elo."""
|
||||
|
||||
def test_equal_ratings(self):
|
||||
"""Equal ratings should produce symmetric changes."""
|
||||
new_w, new_l = calculate_elo(1500.0, 1500.0, k_factor=32.0)
|
||||
assert new_w > 1500.0
|
||||
assert new_l < 1500.0
|
||||
assert new_w - 1500.0 == pytest.approx(1500.0 - new_l, abs=0.01)
|
||||
|
||||
def test_higher_rated_wins(self):
|
||||
"""Higher-rated winner should get a small gain."""
|
||||
new_w, new_l = calculate_elo(1800.0, 1200.0, k_factor=32.0)
|
||||
change = new_w - 1800.0
|
||||
assert 0 < change < 16.0 # expected win → small gain
|
||||
|
||||
def test_lower_rated_wins(self):
|
||||
"""Lower-rated winner (upset) should get a large gain."""
|
||||
new_w, new_l = calculate_elo(1200.0, 1800.0, k_factor=32.0)
|
||||
change = new_w - 1200.0
|
||||
assert change > 16.0 # upset → large gain
|
||||
|
||||
def test_k_factor_scales_change(self):
|
||||
"""Higher K-factor should produce larger rating changes."""
|
||||
_, _ = calculate_elo(1500.0, 1500.0, k_factor=16.0)
|
||||
new_w_16, _ = calculate_elo(1500.0, 1500.0, k_factor=16.0)
|
||||
new_w_64, _ = calculate_elo(1500.0, 1500.0, k_factor=64.0)
|
||||
assert (new_w_64 - 1500.0) > (new_w_16 - 1500.0)
|
||||
|
||||
def test_total_elo_preserved(self):
|
||||
"""Total ELO should be preserved (zero-sum)."""
|
||||
new_w, new_l = calculate_elo(1600.0, 1400.0, k_factor=32.0)
|
||||
assert new_w + new_l == pytest.approx(1600.0 + 1400.0, abs=0.01)
|
||||
|
||||
def test_result_is_rounded(self):
|
||||
"""Results should be rounded to 2 decimal places."""
|
||||
new_w, new_l = calculate_elo(1500.0, 1500.0, k_factor=32.0)
|
||||
assert new_w == round(new_w, 2)
|
||||
assert new_l == round(new_l, 2)
|
||||
Reference in New Issue
Block a user