初始化提交

This commit is contained in:
chenxin committed 2026-08-21 16:00:13 +08:00
commit 887c1f449e
963 files changed
+166869

No files matched your search

@@ -0,0 +1,70 @@
"""感慨触发纯函数测试(辰正 §7.2)。"""
from app.modules.time_sense.sentiment import SentimentInput, detect_sentiment
from app.modules.time_sense.snapshot import TemporalSnapshot
def _snapshot(**overrides) -> TemporalSnapshot:
"""复用 modulation 测试的快照构造思路:构造最小可用 snapshot。"""
from tests.modules.time_sense.test_modulation import _snapshot as _base_snapshot
return _base_snapshot(**overrides)
def test_duration_node_trigger():
snap = _snapshot()
signals = SentimentInput(duration_days=100, duration_nodes={100, 365})
assert detect_sentiment(snap, signals) == "duration_node"
def test_anniversary_prewarm_trigger():
snap = _snapshot()
signals = SentimentInput(duration_days=50, next_milestone_days=5, prewarm_days=7)
assert detect_sentiment(snap, signals) == "anniversary_prewarm"
def test_anniversary_prewarm_not_today():
# next_milestone_days=0 表示今日命中(active_milestone),不算 prewarm
snap = _snapshot()
signals = SentimentInput(duration_days=50, next_milestone_days=0, prewarm_days=7)
assert detect_sentiment(snap, signals) != "anniversary_prewarm"
def test_reunion_memory_trigger():
snap = _snapshot()
signals = SentimentInput(duration_days=10, is_reunion=True, has_reunion_memory=True)
assert detect_sentiment(snap, signals) == "reunion_memory"
def test_late_night_overlay_trigger():
snap = _snapshot(day_period="凌晨")
signals = SentimentInput(duration_days=10, is_reunion=True)
assert detect_sentiment(snap, signals) == "late_night_overlay"
def test_solar_term_trigger():
from app.modules.time_sense.lunar import SolarTermInfo
snap = _snapshot(
solar_term=SolarTermInfo(current_name="立春", next_name="雨水", days_to_next=15)
)
signals = SentimentInput(duration_days=10, strong_solar_terms={"立春"})
assert detect_sentiment(snap, signals) == "solar_term"
def test_no_trigger_returns_none():
snap = _snapshot()
signals = SentimentInput(duration_days=10)
assert detect_sentiment(snap, signals) is None
def test_priority_duration_over_prewarm():
"""认识 100 天且距周年 3 天 → duration_node 优先。"""
snap = _snapshot()
signals = SentimentInput(
duration_days=100,
next_milestone_days=3,
duration_nodes={100},
prewarm_days=7,
)
assert detect_sentiment(snap, signals) == "duration_node"