lift_indicator_suite/tests/host/prio_queue
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_prio_queue.c # Added: prio_queue structure + bsp/display start 2026-04-09 14:18:18 +03:00

test_prio_queue

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

utils/prio_queue/prio_queue.c (utils/prio_queue/prio_queue.h) — очередь с приоритетами на отсортированном массиве фиксированной ёмкости, с вытеснением наименее приоритетного элемента при переполнении.

Категория

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

Моки

Нет.

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

  • init — размер 0, peek/at на пустой очереди возвращают NULL.
  • insert_order — сортировка по приоритету не зависит от порядка вставки (по возрастанию, по убыванию, вперемешку).
  • fifo — при равных приоритетах порядок вставки сохраняется (стабильная сортировка), включая перемешанные группы разных приоритетов.
  • full_eviction — вставка в заполненную очередь: более приоритетный элемент вытесняет худший (PQ_EVICTED), менее или равно приоритетный отклоняется (PQ_FULL); размер очереди не меняется ни в одном из случаев.
  • evict_correct — вытесняется именно наименее приоритетный элемент, верхушка (peek) остаётся корректной после вытеснения.
  • peek — не удаляет элемент при повторных вызовах, указывает на элемент во внутреннем хранилище очереди.
  • remove_at — удаление первого/среднего/последнего элемента со сдвигом остальных, no-op при индексе вне диапазона или на пустой очереди.
  • at — доступ по индексу, NULL для индекса вне диапазона.
  • size — инкремент при вставке, декремент при удалении, не меняется при PQ_FULL.
  • stress — полный цикл вставки всех элементов и последовательного извлечения с проверкой сохранения порядка; чередование вставок с одинаковыми и разными приоритетами.

Гарантии

  • peek() / at(0) всегда возвращает элемент с наивысшим приоритетом (наименьшим значением согласно переданной cmp-функции).
  • При равных приоритетах порядок извлечения строго FIFO.
  • При переполнении: более приоритетная вставка вытесняет наименее приоритетный существующий элемент (PQ_EVICTED), иначе отклоняется (PQ_FULL) без изменения состояния очереди.
  • remove_at() на некорректном индексе или пустой очереди — безопасный no-op, не приводит к падению или порче данных.

Запуск

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