feat(generator): добавлен поток активных визитов по тикам

- Зачем:
  - генератор должен выпускать события визита по запланированным тикам, не приклеивая весь визит к одному запуску.
- Что:
  - добавлен тиковый слой `TickStreamGenerator` с активными визитами и выпуском созревших событий.
  - добавлена валидация потолка активных визитов относительно потолка популяции.
  - сохранён событийный смысл `event_budget` и добавлен регрессионный тест против разгона интенсивности.
- Проверка:
  - `uv run --with-requirements generator/requirements.txt pytest generator/tests -q` — 81 passed.
This commit is contained in:
Dmitry Dementiev
2026-06-11 15:32:53 +03:00
parent 642789d484
commit d8da27187e
9 changed files with 316 additions and 48 deletions
+7
View File
@@ -29,6 +29,12 @@ class TestConfigValidation:
with pytest.raises(ValueError, match="GEN_MAX_SESSION_EVENTS"):
replace(base_config, max_session_events=0)
def test_max_active_sessions_must_be_less_than_population(self, base_config):
"""Потолок активных визитов должен быть меньше потолка популяции."""
from dataclasses import replace
with pytest.raises(ValueError, match="GEN_MAX_ACTIVE_SESSIONS"):
replace(base_config, max_active_sessions=10, population_max=10)
def test_data_dir_must_exist(self, base_config):
"""data_dir должен существовать."""
from dataclasses import replace
@@ -40,6 +46,7 @@ class TestConfigValidation:
assert base_config.tick_seconds == 5
assert base_config.lambda_base_per_min == 200
assert base_config.jitter_pct == 20
assert base_config.max_active_sessions < base_config.population_max
class TestConfigDefaults: