"""Tierlist-Parser: Rauschzeilen raus, Meta-Stärke auf 1.0 zentriert."""
from tft.staticdata import tierlist
PAGE = """
Unit
Tier
Avg Place
LuxS2.62
33.6%134,21929.3%
ShenB4.59
10.0%139,56330.4%
EliseB4.46
10.3%67,54114.7%
"""
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("nichts") == {}
assert tierlist.meta_strength({}, {"X": {"name": "X"}}) == {}