Порча попадает туда, где считают, только если корпус сверки доходит до каталога с единственным случаем
Порча (правка эталона, которой сверка обязана покраснеть) может примениться к исходнику — то есть «найти своё место» — и всё равно не проверить ничего, потому что корпус, по которому идёт сверка, до испорченной строки не доходит. Отличить это от исправной порчи по виду нельзя: и там и там прогон зелёный, и там и там подмена применилась.
Чем подтверждено. flang/self/conc.flang, сверка словаря действий. Порча: из списка действий, у которых есть адресат, убрано седьмое — «поручить». Корпус сверки перечислял четыре каталога: flang/conc/examples, examples, flang/stdlib, flang/core. Прогон 18 августа, ветка work/planirovshchik:
| корпус | имён вариантов | из них действий | изъятие «поручить выпало» |
|---|---|---|---|
| четыре каталога | 198 | 3 | зелёное — не поймано |
плюс flang/conc/services | 198 | 4 | красное |
Единственная программа дерева, где вообще встречается поручить, — это flang/conc/services/file-read.flang, и лежит она в пятом каталоге. Пока корпус туда не заглядывал, вся ветка седьмого действия у обеих сторон стояла непроверенной, а сверка при этом печатала «расхождений 0» и «программ 174».
Тем же изъятием найдена и настоящая ошибка, которую эта дыра прятала: на стволе «Поле процесса у действия» отвечало на "поручить" пустой строкой, а свидетель — "кому".
Чему учит. У порчи есть два разных вопроса, и зелёный прогон отвечает только на первый:
- применилась ли подмена (ловится сравнением текста до и после — это уже делается);
- лежит ли испорченная строка на пути хотя бы одного значения корпуса.
Второе проверяется не рассуждением, а снятием: убрать каталог (или программу) из корпуса и посмотреть, что изъятие стало зелёным. Если после снятия ничего не изменилось — корпус до этого места не доходил и раньше.
Дешёвый признак того же: печатать не только «расхождений 0», но и ОХВАТ — сколько имён/случаев корпус вообще предъявил. Строка «из них действий 3» при семи действиях языка видна глазом, а «расхождений 0» — нет.
Чем ограничено. Признак не полный: корпус может доходить до строки и всё равно не различать её значений (например, сравнивать поле, которое у всех программ пустое). Тогда изъятие тоже зелёное, а снятие каталога ничего не покажет.
Смежное. Проверка, переставшая сравнивать, продолжает зеленеть · Снятая правка обязана красить тест · Побайтовая сверка со свидетелем — главный метод проверки · Перечень, записанный в проверке руками, переживает дерево