Files
ewsdr/test/tci/run.sh
T
ew8bakandClaude Opus 5 d6a7dd96c5 test(cat): стенд разбора команд — свойства всего набора, а не список
Команд в CATEngine больше трёхсот, и проверять их поимённо бессмысленно: список
отстанет от кода в первую же неделю. Поэтому стенд ходит по кодам перебором
AA..ZZ (незнакомый движок отсеет сам, ответив «?;») и проверяет свойства,
которые обязаны выполняться на всём наборе сразу.

Круговой прогон: то, что команда отдала на опрос, она обязана принять обратно.
Это ловит расхождение ширин GET и SET — клиент, который читает значение и пишет
его назад, обычная идиома логгеров. Read-only статусы (IF, ID, ZZIF, ZZID)
исключены списком: их ответ — составной снимок, обратно его не пишут ни Kenwood,
ни Thetis.

Мусор в поле: разбор не имеет права упасть ни на одном аргументе (сборка с
-Criot: диапазоны, переполнения, приведения типов) и обязан отвечать либо ничем,
либо «?;»/«E;», либо ОДНИМ корректным кадром — лишняя ';' внутри ответа для
клиента означает две команды вместо одной, и дальше он читает мусор. Отдельным
прогоном на чистом радио: нечисловое поле не имеет права ничего перестроить.
Числовые формы в этот прогон не входят намеренно — «ZZFA00000000000;»
синтаксически законна, и решать её судьбу должен контроллер, а не разбор.

Радио подставное (TFakeRadio): ни движка, ни железа, но геттеры и сеттеры
настоящие, поэтому видно не «команда ответила», а ЧТО она изменила.

Плюс точечные регрессии на дефекты, которые уже случались: заглушка, молча
правившая радио (ZZVB копировал VFO A в VFO B прямо на опросе), ошибочные
алиасы, нечисловое поле как индекс 0, ширины полей.

★-B в обоих стендах (и в TCI тоже). Не «для чистоты»: fpc сверяет .ppu с
исходником по времени с точностью до секунды, и правка, попавшая в ту же
секунду, что и прошлая сборка, молча не подхватывается — стенд выносит вердикт
о СТАРОМ коде. Это хуже, чем не запускаться вовсе, и ловится обычно на
негативном контроле, когда исходник меняют туда-обратно (на нём и поймалось).
Полная пересборка графа стенда занимает около секунды.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 11:21:14 +03:00

36 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# Стенд TCI: сборка и прогон. Запускать откуда угодно — скрипт сам перейдёт
# в свой каталог. Возвращает ненулевой код, если хоть одна проверка провалена.
#
# Флаги те же, что у демона (см. build-ewsdrd.sh), и по тем же причинам:
# -Mobjfpc — командный режим по умолчанию: включает вложенные комментарии.
# С -Mdelphi {$MODE Delphi} внутри шапки WebUtils.pas закрывает
# комментарий раньше времени, и компиляция падает на
# «illegal character». Юниты дальше сами ставят свой {$mode}.
# -dHEADLESS — PlatformUtils не тянет Forms (LCL): стенду виджетсет не нужен,
# а без этого сборка требует всю LCL.
# ★Каталог .ppu — свой, с именем НЕ «lib», и путь абсолютный. Относительное
# «lib/<cpu>-<os>» компилятор ищет и относительно -Fu, то есть находит units
# GUI-сборки в корне проекта — а там PlatformUtils собран с LCL, и стенд падает
# на линковке с «undefined reference to TC_$FORMS_$$_SCREEN».
# libwdsp нужна только части E (сквозной прогон через движок); без неё эта
# часть сообщает о пропуске, а остальные идут как обычно.
set -e
cd "$(dirname "$0")"
HERE=$(pwd)
CPU=$(fpc -iTP)
OS=$(fpc -iTO)
OUTUNITS="$HERE/units/${CPU}-${OS}"
OUT="$HERE/bin/${CPU}-${OS}"
mkdir -p "$OUTUNITS" "$OUT"
# ★-B (пересобрать всё) обязателен, а не «для чистоты»: fpc сверяет .ppu с
# исходником по времени с точностью до секунды, и правка, попавшая в ту же
# секунду, что и прошлая сборка, молча не подхватывается. Стенд тогда выносит
# ВЕРДИКТ О СТАРОМ КОДЕ — хуже, чем не запускаться вовсе (ловится это обычно на
# негативном контроле, когда исходник меняют туда-обратно). Полная пересборка
# графа стенда занимает около секунды.
fpc -B -Mobjfpc -O2 -dHEADLESS \
-Fu../.. -FU"$OUTUNITS" -k-L/usr/local/lib \
-o"$OUT/tcitest" tcitest.pas
exec "$OUT/tcitest" "$@"