# tests-host — модульные тесты движка roomtest

Прогоняются под `ucsim_z80`, обвязка общая — `testkit/` (там же объяснение,
почему под z80, а не хостовым gcc, и грабли).

```
make host-tests                                  # из корня, вместе с остальными
make -C applications/PoP/roomtest/tests-host     # только эти
make -C applications/PoP/roomtest/tests-host t_geom
```

## Что покрыто

| набор | модуль | что проверяет |
|-------|--------|---------------|
| `t_geom` | `pop_geom.c` | геометрия комнаты (`x_bump`, `y_land`, `y_to_row`) и PRNG оригинала |

Главный тест в `t_geom` — `geom_lcg_matches_reference`. LCG оригинала
(`s = s*214013 + 2531011`) написан в `pop_geom.c` на ассемблере по схеме
Горнера ради обхода `__mullong`, и заявка «бит-в-бит как в SDLPoP» до
появления теста держалась только на комментарии. Тест сверяет рукописный
asm с наивной 32-битной формулой на 128 шагах — и по возвращаемому
значению, и по обеим половинам сида.

## Что нужно, чтобы двинуться дальше

Следующие на очереди модули (`pop_trob`, `pop_level`, `pop_map`, логика
падающих плит) упираются в два шва, и оба затрагивают продукт:

1. **Доступ к странице уровня.** `pop_level.c` ходит по абсолютным адресам
   (`(uint8_t *)(LVL_DATA_OFF + …)` после `gfx_w0_map`) — в тестах это
   обращение в никуда. Нужен макрос вида `W0PTR(off)`: на таргете как
   сейчас, в тестах — смещение в обычном массиве.
2. **Журналирующий рендерер** вместо `pop_bg`/`pop_gdraw` — не заглушка, а
   запись вызовов, чтобы проверять «какой тайл помечен к перерисовке, каким
   кодом, с каким счётчиком страниц». `BUG-GATE-ANIM-1` был ровно такой
   формы.

После этого `bug_closed.md` превращается в готовый список регрессионных
кейсов: у каждой записи там есть симптом и ожидаемое поведение.

Отдельно стоит завести тест на `BUG-LOOSE-2` — он до сих пор помечен в
`bug_list.md` как непроверенный именно потому, что гонку «уйти из комнаты
раньше, чем долетит плита» через мост MAME воспроизвести не удалось. На
уровне логики это несколько строк: заспавнить кусок, сменить комнату,
тикать до приземления, проверить щебень в данных уровня.
