Skip to content

Self Tests RU

Yahasi edited this page Jul 6, 2026 · 3 revisions

🌐 English · Русский

← GPU-рендерер · Структура проекта →

Самотесты

Nova поставляется с пакетом headless-самотестов, которые запускаются как аргументные ветки демо-приложения — без интерактивного ввода, без рендера в живой терминал — поэтому их можно гонять на CI и защищаться от регрессий. Каждый печатает строку PASS / FAIL.

Запуск

Соберите один раз, затем запустите тест по имени:

dotnet build -c Release
dotnet run --project SampleGame -c Release --no-build -- <имя_теста>

Например:

dotnet run --project SampleGame -c Release --no-build -- gputest

Контрибьюторы обычно собирают через dotnet build -c Release --no-incremental (обычная инкрементальная сборка может ложно показать «0 warnings»).

Тесты

Имя Что защищает
impulsetest Импульсный решатель физики — сфера и ящик падают, лежат, отскакивают, скользят, кувыркаются, стопкуются, разлетаются и засыпают на прогоне по dt (Стадии 1–6).
cutovertest Загрузку миров со устаревшим ключом engine и roundtrip сетевой синхронизации физики (authority шагает → сериализация → клиент экстраполирует + подводит → сходится).
bvhtest Построение/обход BVH.
worldtest Систему миров.
editortest Встроенный редактор end-to-end: свет, объекты-камеры (Fixed/Follow, циклы F7/F8, обход стен, прицел в разделённом экране), компоновку HUD и чистую математику редактора.
picktest Выбор прицелом / пикинг объектов.
worldsynctest Полный roundtrip мира через WorldSync (каждое поле объекта/света/камеры/физики/текстуры + сравнение).
collisiontest Чистые резолверы коллизии пузыря камеры и 3D SAT.
physicstest Общую чистую математику физики (кватернионная ориентация, lerp углов, экстраполяция, комбинация упругости, ближайшая точка на треугольнике).
gputest Паритет CPU↔GPU — рендерит фиксированные сцены (в т.ч. текстурированные) на обоих путях и сравнивает попиксельно.
texturetest Конвейер декода / сэмплинга / UV / параметров / мипов PNG.
splashtest Хелперы блочных букв стартового сплэша.
uitest Консольный UI-тулкит мастера настройки (компоновка, навигация фокуса, виджеты, hit-test мыши, поток мастера).
colortest Визуально-только цветовая диагностика (без строки PASS/FAIL).
uidemo Визуально-только интерактивное демо UI-тулкита (проверка зума шрифта).

Что значит «gputest Δ=0»

gputest рендерит одну и ту же сцену CPU-рейтрейсером и GPU-ядром и сравнивает попиксельно:

  • С тенями выкл каждая фича детерминирована, поэтому два изображения должны быть точно равны — разница пикселей Δ = 0.
  • С тенями вкл отличаться может только тонкая полоса на границе тени.
  • Для текстур меш-примитивы и импортированные меши остаются Δ = 0; аналитическая UV сферы допускает тонкий шов/полюсную полосу, а mipmapped-объект — тонкую полосу.

Результат Δ=0 — доказательство того, что изменение математики затенения / пересечения / компоновки / BVH / текстур сохранило CPU- и GPU-рендереры синхронными. См. GPU-рендерер.

Clone this wiki locally