Files
tft/backend/tests/test_tierlist.py
2026-09-07 07:44:09 +02:00

43 lines
1.9 KiB
Python

"""Tierlist-Parser: Rauschzeilen raus, Meta-Stärke auf 1.0 zentriert."""
from tft.staticdata import tierlist
PAGE = """
<div class="TableItemRow">Unit</div><div>Tier</div><div>Avg Place</div>
<div class="TableItemRow"><a>Lux (Blossom)</a><span>S</span><span>1.20</span>
<span>80.0%</span><span>5</span><span>0.0%</span></div>
<div class="TableItemRow"><a>Lux</a><span>S</span><span>2.62</span>
<span>33.6%</span><span>134,219</span><span>29.3%</span></div>
<div class="TableItemRow"><a>Shen</a><span>B</span><span>4.59</span>
<span>10.0%</span><span>139,563</span><span>30.4%</span></div>
<div class="TableItemRow"><a>Elise</a><span>B</span><span>4.55</span>
<span>9.1%</span><span>11</span><span>0.0%</span></div>
<div class="TableItemRow"><a>Elise</a><span>B</span><span>4.46</span>
<span>10.3%</span><span>67,541</span><span>14.7%</span></div>
"""
def test_small_samples_and_variants_are_dropped():
rows = tierlist.parse(PAGE)
# "Lux (Blossom)" mit 5 Spielen ist Rauschen, die Elise-Zeile mit 11 auch.
assert sorted(rows) == ["Elise", "Lux", "Shen"]
assert rows["Lux"]["avg_place"] == 2.62
assert rows["Lux"]["games"] == 134219
assert rows["Elise"]["avg_place"] == 4.46 # die größere Stichprobe gewinnt
def test_meta_strength_centres_on_one():
rows = tierlist.parse(PAGE)
units = {"TFT18_Lux": {"name": "Lux"}, "TFT18_Shen": {"name": "Shen"},
"TFT18_Elise": {"name": "Elise"}, "TFT18_Ivern": {"name": "Ivern"}}
meta = tierlist.meta_strength(rows, units)
# Ivern steht in keiner Zeile und bekommt keinen Wert.
assert set(meta) == {"TFT18_Lux", "TFT18_Shen", "TFT18_Elise"}
assert abs(sum(meta.values()) / len(meta) - 1.0) < 0.001
assert meta["TFT18_Lux"] > 1 > meta["TFT18_Shen"]
def test_no_rows_means_no_meta():
assert tierlist.parse("<html>nichts</html>") == {}
assert tierlist.meta_strength({}, {"X": {"name": "X"}}) == {}