38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
from lyra_worker.quality import quality_class, source_tier, rank_key
|
|
from lyra_worker.types import Candidate, Quality
|
|
|
|
HIRES = Quality(fmt="FLAC", lossless=True, bit_depth=24, sample_rate=96000)
|
|
CD = Quality(fmt="FLAC", lossless=True, bit_depth=16, sample_rate=44100)
|
|
MP3 = Quality(fmt="MP3", lossless=False, bitrate_kbps=320)
|
|
|
|
|
|
def _cand(source, quality):
|
|
return Candidate(source=source, source_ref="x", matched_artist="A",
|
|
matched_album="B", quality=quality, track_count=10)
|
|
|
|
|
|
def test_quality_class_tiers():
|
|
assert quality_class(HIRES) == 3
|
|
assert quality_class(CD) == 2
|
|
assert quality_class(MP3) == 1
|
|
|
|
|
|
def test_source_tier_order():
|
|
assert source_tier("qobuz") == 0
|
|
assert source_tier("soulseek") == 1
|
|
assert source_tier("youtube") == 2
|
|
|
|
|
|
def test_design_ranking_order():
|
|
# Qobuz hi-res > Qobuz lossless > Soulseek FLAC > Soulseek MP3 > YouTube
|
|
ordered = [
|
|
_cand("qobuz", HIRES),
|
|
_cand("qobuz", CD),
|
|
_cand("soulseek", CD),
|
|
_cand("soulseek", MP3),
|
|
_cand("youtube", MP3),
|
|
]
|
|
ranks = [rank_key(c) for c in ordered]
|
|
assert ranks == sorted(ranks, reverse=True)
|
|
assert len(set(ranks)) == 5 # strict total order, no ties
|