All checks were successful
Deploy / changes (push) Successful in 7s
Deploy / build-frontend (push) Has been skipped
Deploy / deploy-caddy (push) Has been skipped
Deploy / build-backend (push) Successful in 2m4s
Deploy / build-worker (push) Successful in 3m9s
Deploy / deploy (push) Successful in 1m27s
Deploy / deploy-status (push) Successful in 1s
Deploy / perimeter-smoke (push) Successful in 9s
45 lines
2.2 KiB
Python
45 lines
2.2 KiB
Python
"""#2464 кластер H: докстринг `_timing_overlap` обещал не ту формулу.
|
||
|
||
Было записано `exp(−|Δмесяцев| / half_life)` и тут же — «расхождение в half_life
|
||
мес → 0.5». Эти два утверждения несовместимы: `exp(−1) ≈ 0.368`, а не 0.5.
|
||
|
||
Код при этом верен — он считает `0.5 ** (Δ/half_life)` и даёт ровно 0.5 на
|
||
половинном периоде. Расходился докстринг.
|
||
|
||
Тест закрепляет СВОЙСТВО, а не текст комментария: на Δ = half_life значение равно
|
||
0.5, и оно НЕ равно exp(−1). Второе утверждение существенно — без него тест прошёл
|
||
бы и на экспоненциальной формуле, если бы кто-то «починил» код по старому
|
||
докстрингу.
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import math
|
||
from datetime import date
|
||
|
||
from app.services.forecasting.special_indices import _timing_overlap
|
||
|
||
|
||
def test_half_life_gives_exactly_one_half() -> None:
|
||
same = date(2026, 1, 1)
|
||
later = date(2026, 7, 1) # ровно 6 месяцев
|
||
|
||
value = _timing_overlap(later, same, half_life_months=6.0)
|
||
|
||
assert value is not None
|
||
assert abs(value - 0.5) < 1e-9, "на половинном периоде значение обязано быть 0.5"
|
||
assert abs(value - math.exp(-1)) > 0.1, (
|
||
"значение совпало с exp(−1) — значит формула экспоненциальная, "
|
||
"а докстринг обещает половинное затухание"
|
||
)
|
||
|
||
|
||
def test_simultaneous_launch_is_one() -> None:
|
||
same = date(2026, 1, 1)
|
||
assert _timing_overlap(same, same, half_life_months=6.0) == 1.0
|
||
|
||
|
||
def test_missing_date_returns_none_not_a_number() -> None:
|
||
"""Контроль: недоступную ось не фабрикуем (обещание того же докстринга)."""
|
||
assert _timing_overlap(None, date(2026, 1, 1)) is None
|
||
assert _timing_overlap(date(2026, 1, 1), None) is None
|