"""告警节流测试(规格 §5:第 1 次 + 每满 100 次,带累计计数)。""" import pytest from stereo_ranger import WarnThrottle def test_first_and_every_hundred_emit(): throttle = WarnThrottle() # 默认 every=100 assert throttle.should_emit("a") is True for _ in range(98): assert throttle.should_emit("a") is False assert throttle.should_emit("a") is True # 第 100 次 for _ in range(99): assert throttle.should_emit("a") is False assert throttle.should_emit("a") is True # 第 200 次 assert throttle.count("a") == 200 def test_categories_are_independent(): throttle = WarnThrottle() assert throttle.should_emit("a") is True assert throttle.should_emit("b") is True assert throttle.count("a") == 1 assert throttle.count("b") == 1 assert throttle.count("never_seen") == 0 def test_custom_interval(): throttle = WarnThrottle(every=3) # 规格语义"第 1 次 + 计数每满 every" → 第 1/3/6 次打印 assert [throttle.should_emit("a") for _ in range(6)] == [True, False, True, False, False, True] def test_clear_resets_counts(): throttle = WarnThrottle() throttle.should_emit("a") throttle.clear() assert throttle.count("a") == 0 assert throttle.should_emit("a") is True def test_invalid_interval(): with pytest.raises(ValueError): WarnThrottle(every=0)