lift_indicator_suite/tests/host/ring_buffer
2026-07-09 09:57:54 +03:00
..
README.md # bootloader: phase 2 + host test docs 2026-07-09 09:57:54 +03:00
test_ring_buffer.c # 4 2026-03-16 16:53:16 +03:00

test_ring_buffer

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

utils/ring_buffer/ring_buffer.c (utils/ring_buffer/ring_buffer.h)

Категория

A — платформонезависимый модуль, только стандартная библиотека C. Только Unity.

Моки

Нет — модуль не имеет внешних зависимостей, тестируется напрямую.

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

  • Init — корректная инициализация с валидными параметрами; отклонение NULL-указателей, нулевого размера и размера, не являющегося степенью двойки; приём всех степеней двойки от 1 до 256.
  • Put / Get — запись/чтение одного байта, get из пустого буфера, put в полный буфер, порядок FIFO.
  • Write / Read — блочная запись/чтение, частичная запись при нехватке места, частичное чтение при нехватке данных, чтение из пустого буфера.
  • Full / Empty — граничные состояния и счётчики (count, free) до и после заполнения/опустошения.
  • Wraparound — несколько циклов заполнения/опустошения, переход индексов через границу массива, сохранение целостности данных при частичном перекрытии индексов после сдвига к краю буфера.
  • SPSC simulation — 200 итераций чередующихся put/get (имитация ISR-producer / task-consumer в один поток) с проверкой сохранения порядка данных.
  • Resetсброс состояния и корректное повторное использование буфера без остаточных артефактов.

Гарантии

  • ring_buffer_init() отклоняет NULL-указатели, нулевой и не степень-двойки размер.
  • Данные извлекаются в порядке FIFO для любых сочетаний put/get и write/read.
  • Индексация корректно оборачивается через границу массива (маска &) на любом протестированном размере — данные не повреждаются при wraparound.
  • put/write в полный буфер и get/read из пустого не повреждают состояние и не пишут за границы переданных буферов.
  • ring_buffer_reset() приводит буфер в состояние, идентичное состоянию сразу после init.

Запуск

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