lift_indicator_suite/tests/host/timeout/README.md

2.2 KiB
Raw Permalink Blame History

test_timeout_pattern

Модуль под тестом

Не отдельный файл, а паттерн таймаута (uint32_t)(now - start) >= (uint32_t)timeout, используемый в bsp_uart_read(), bsp_delay() и других BSP-модулях (счётчик — bsp_tick_get_ms()). Тестируется сама математика, изолированно от железа.

Категория

A — чистая математика, без внешних зависимостей. Только Unity.

Моки

Нет.

Что проверяется

  • Нормальные случаи — истёкший/неистёкший таймаут при elapsed < timeout, elapsed == timeout, elapsed > timeout; нулевой elapsed; timeout == 0 (истекает немедленно).
  • Wraparound — счётчик now/start переполняется через UINT32_MAX; беззнаковая арифметика корректно вычисляет elapsed в этих случаях (проверено на нескольких комбинациях старта у границы UINT32_MAX).
  • Антипаттерн — отдельный тест демонстрирует, что альтернативная формула now >= start + timeout ломается при переполнении start + timeout, в отличие от используемого паттерна.

Гарантии

  • Формула (uint32_t)(now - start) >= timeout корректна при любом взаимном положении now и start, включая переполнение 32-битного счётчика.
  • elapsed == timeout считается истёкшим таймаутом (граница включительно).
  • timeout == 0 всегда трактуется как немедленно истёкший.
  • Задокументировано и подтверждено тестом, почему альтернативная формула now >= start + timeout небезопасна и не должна использоваться.

Запуск

ctest --preset host-debug-test -R test_timeout_pattern -V