| .. | ||
| README.md | ||
| test_ring_buffer.c | ||
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