| 123456789101112131415161718192021222324252627282930313233343536373839 |
- """50+ 子分公式——band 纯50+(仅 50- 桶,41-50 已忽略)、TGI 200 满分、TGI 6 成 + 占比 4 成、缺字段 incomplete。"""
- from content_agent.business_modules.content_discovery.fifty_plus import fifty_plus_score
- _OLD = { # 广场舞健身号:41-50 应被忽略,只算 50- 桶
- "41-50": {"percentage": "31.73%", "preference": "210.02"},
- "50-": {"percentage": "29.76%", "preference": "130.53"},
- }
- _YOUNG = { # 原神号(年轻向)
- "41-50": {"percentage": "5.74%", "preference": "27"},
- "50-": {"percentage": "5.50%", "preference": "17"},
- }
- def test_score_separates_old_from_young():
- old = fifty_plus_score(_OLD)
- young = fifty_plus_score(_YOUNG)
- assert old["status"] == "ok" and young["status"] == "ok"
- assert old["band"] == "50+"
- # 纯 50+ 口径:只算 50- 桶(29.76% / TGI 130.53)→ 0.6*65.27+0.4*29.76 ≈ 51.06
- assert old["band_percent"] == 29.76
- assert 50 <= old["score"] <= 52
- assert 6 <= young["score"] <= 8 # 仅 50-=5.5%/17 → ≈7.3
- assert old["score"] > young["score"]
- def test_tgi_200_is_full_marks_and_60_40_split():
- # 单桶:占比 50%、TGI 200 → tgi_score=100、percent_score=50 → 0.6*100+0.4*50=80。
- result = fifty_plus_score({"50-": {"percentage": "50%", "preference": "200"}})
- assert result["tgi_score"] == 100.0
- assert result["percent_score"] == 50.0
- assert result["score"] == 80.0
- def test_incomplete_when_band_missing_or_fields_missing():
- assert fifty_plus_score({})["status"] == "incomplete"
- assert fifty_plus_score(None)["status"] == "incomplete"
- assert fifty_plus_score({"18-23": {"percentage": "60%", "preference": "300"}})["status"] == "incomplete"
- assert fifty_plus_score({"50-": {"percentage": "30%"}})["status"] == "incomplete" # 缺 preference
|