diff --git a/.flangrc b/.flangrc index c5f25cf83..dd7dd1acd 100644 --- a/.flangrc +++ b/.flangrc @@ -58,6 +58,7 @@ script.proof-record:check = bootstrap/flang run-script seed:freshness --what pro script.record-source:check = bootstrap/flang io scripts/guards/record-follows-its-source.fscript --plan Проверка script.record-source:forgery = bootstrap/flang io scripts/guards/record-follows-its-source.fscript --plan Подлог script.checker:check = bootstrap/flang io flang/proof/checker/tests/run.fscript --max-steps 4000000000 --timeout 600000 +script.plan-rules:probe = bootstrap/flang io flang/proof/probes/plan-rules-asked/run.fscript --plan Binary script.translation:check = sh flang/translation/run.sh script.proved-share:check = bootstrap/flang io flang/proof/share-measure.fscript --max-steps 4000000000 --timeout 900000 -- --set corpus script.proved-share:forgery = bootstrap/flang io flang/proof/share-ledger-forgery.fscript --max-steps 4000000000 --timeout 900000 diff --git a/docs/tasks/7706-the-check-command-never-asks-the-plan-judge.md b/docs/tasks/7706-the-check-command-never-asks-the-plan-judge.md new file mode 100644 index 000000000..848072fab --- /dev/null +++ b/docs/tasks/7706-the-check-command-never-asks-the-plan-judge.md @@ -0,0 +1,120 @@ +--- +номер: 7706 +заголовок: Команда «check» идёт своей дорогой и судью планов на ней не спрашивают — двенадцать подделок отвечают кодом 0 +статус: свободна +приоритет: P1 +исполнитель: — +ветка: — +команда: первая +карта: Что мешает больше всего +рядом: 8398 +нужность: тот же двоичный на том же файле: «test» отвергает подделку, «check» принимает её молча +--- + +# 7706. Команда «check» идёт своей дорогой и судью планов на ней не спрашивают + +Правила над объявлением `план` написаны (`flang/self/io.flang`, модуль +«Проверка планов»), ввезены в замыкание и вызываются из +`«Проверить связанное»`. Но `flang check` идёт НЕ через неё: дорогу он +повторяет своим кодом в `repl_check_sources` +(`flang/src/emit/c/flang_repl.c`), вызов за вызовом, — и вызова планов в этом +списке нет. + +Это ровно та же порода, что задача 7101 у процессов: слой едет в двоичном +пассажиром. Разбор задачи — в +[`docs/zettel/a-rule-inside-the-binary-is-not-a-rule-the-binary-asks.md`](../zettel/a-rule-inside-the-binary-is-not-a-rule-the-binary-asks.md). + +## Шаги воспроизведения + +1. Один и тот же файл двум судьям одного и того же двоичного: + `bootstrap/flang check flang/test/fixtures/plany/01-dvazhdy.flang` + и `bootstrap/flang test flang/test/fixtures/plany/01-dvazhdy.flang`. +2. Смотреть код возврата и есть ли в выводе `FLANG_PLAN`. +3. Спросить двоичный, есть ли в нём вызов: + `grep -c 'Проверить планы' bootstrap/flang_repl.c` и + `grep -c 'compiler_flang_proverit_plany(' bootstrap/compiler_flang.c`. + +## Что происходит + +``` +$ bootstrap/flang check flang/test/fixtures/plany/01-dvazhdy.flang +модуль «План дважды»: функций 2, из них с доказанным завершением 2; типов 4 +… проверено — разбор, типы, завершаемость, ядро и примеры; замечаний нет код 0 + +$ bootstrap/flang test flang/test/fixtures/plany/01-dvazhdy.flang +FLANG_PLAN в файле …/01-dvazhdy.flang, строка 25, столбец 1: + план «Работа» объявлен дважды код 1 + +$ grep -c 'Проверить планы' bootstrap/flang_repl.c +0 +$ grep -c 'compiler_flang_proverit_plany(' bootstrap/compiler_flang.c +4 +``` + +Четыре вхождения в напечатанном компиляторе — объявление, два вызова +(`«Проверить связанное»` и `«Замечания до ядра»`) и строка таблицы вызова по +имени. В `flang_repl.c` — ни одного, и так было всегда: +`git log --all -S 'Проверить планы' -- flang/src/emit/c/flang_repl.c` пуст. + +Версия: flang 0.7.23. Дата прогона: 4 октября 2026. + +## Что должно быть + +Код 1 и названное сообщение правила на каждой из двенадцати подделок +`flang/test/fixtures/plany/01`…`12`, код 0 на целом образце `00`, и на +образце `13` — одно замечание проверки типов, а не два. + +Числа и сообщения не предсказаны: вставка тихого вызова +`«Проверить планы»` сделана в копии дерева, двоичный пересобран, ответы сняты +прогоном и лежат построчно в +[`flang/proof/probes/plan-rules-asked/expected.tsv`](../../flang/proof/probes/plan-rules-asked/expected.tsv). + +Заодно обязана перестать врать строка отчёта: в списке «ПРОВЕРЕНО» у +`--быстро` названы процессы и не названы планы (`flang_repl.c`, строка 8721). +Поверхность `plans` при этом УЖЕ стоит среди судимых («Все судимые ключи» в +`flang/self/bootstrap/compiler.flang`), поэтому фраза «сверены НЕ ДО КОНЦА» +не печатается вовсе — и ответ на подделке совпадает с ответом на целой +программе знак в знак. После правки эта запись станет правдой; сегодня она +ложь. + +## Обходной путь + +Есть: `flang test <файл>` на том же двоичном правила планов спрашивает и +подделку отвергает. Для файлов без примеров это чистая проверка. + +## Когда задача сделана + +1. `bootstrap/flang io flang/proof/probes/plan-rules-asked/run.fscript --plan Binary` + отвечает кодом 0: `plan-rules-asked: проб 29, разошлось 0`. Сегодня эта же + команда даёт код 1 и `разошлось 12` — проба и различает исправленный + двоичный от нынешнего. +2. Проба позвана не только короткой командой `plan-rules:probe`, но и шагом в + `.github/workflows/binary.yml` рядом с соседними наборами проб. Шаг + ставится ТЕМ ЖЕ коммитом, что и правка: до неё он красный. +3. Живые программы дерева с объявлением `план` по-прежнему проходят + `bootstrap/flang check`: правила не отвергают верное. Это уже замерено на + правленом двоичном: из 268 программ дерева с таким объявлением ответ + сменили РОВНО двенадцать — сами подделки. Таблица — в задаче 8398, + раздел «Правила не отвергают верное». + +4. Дорогу `repl_check_sources` делят `flang check` и оболочка + (`repl_check`), поэтому одна вставка закрывает обе. Третий и четвёртый + судьи того же двоичного правила УЖЕ спрашивают: `flang test` и + `flang io` без `--на-веру` отвергают подделку сами + (`io … 03-sostoyanie-neizvestno.flang --plan Работа` → код 3, + «замечаний проверки 1, первое — FLANG_PLAN: состояние плана «Работа» — + неизвестный тип «Хода»»). + +## Где живёт правка + +`flang/src/emit/c/flang_repl.c`, функция `repl_check_sources`: тихий вызов +`«Проверить планы»` со слитыми в общий список бедами, рядом с таким же +вызовом процессов. Содержимое этого файла печать берёт из дерева +(`«Файл оболочки»` в `flang/self/emit-c.flang` читает его как +«исходник оболочки»), поэтому ПЕРЕПЕЧАТКА САМОСБОРНОЙ ЧАСТИ НЕ НУЖНА: +`bootstrap/compiler_flang.c` уже несёт и правила, и их вызов из +`«Проверить связанное»`. Доезжает правка той же вставкой в парную копию +`bootstrap/flang_repl.c` и `make -C bootstrap`. + +Список «ПРОВЕРЕНО» у `--быстро` живёт в том же файле (строка 8721) — и его +правка перепечатки тоже не требует. diff --git a/docs/tasks/8398-plans-are-judged-and-the-compiler-says-so.md b/docs/tasks/8398-plans-are-judged-and-the-compiler-says-so.md index 45684969d..85ce9c019 100644 --- a/docs/tasks/8398-plans-are-judged-and-the-compiler-says-so.md +++ b/docs/tasks/8398-plans-are-judged-and-the-compiler-says-so.md @@ -7,7 +7,7 @@ ветка: — команда: первая карта: Чего в языке нет вовсе -рядом: — +рядом: 7706 нужность: программа со сломанным планом получает тот же ответ, что и верная --- @@ -17,85 +17,145 @@ «Проверка планов»), ввезены в компилятор и вызываются из функции проверки исходников. Собранный двоичный при этом не отвергает ни одного образца. +ПРИЧИНА НАЙДЕНА И ОНА ОДНА — задача 7706: `flang check` повторяет дорогу +проверки своим кодом в `repl_check_sources` (`flang/src/emit/c/flang_repl.c`), +и вызова `«Проверить планы»` в этом списке нет. Правила целы, данные до них +доходят, судья отвечает верно — его не спрашивают. Эта задача остаётся +ведомостью двенадцати образцов: она закрывается, когда закрыта 7706 и проба +на четырнадцати образцах зеленеет. + ## Шаги воспроизведения -1. `grep -n 'использует «Проверка планов»\|«Проверить планы» от' flang/self/bootstrap/compiler.flang` -2. `bootstrap/flang check flang/test/fixtures/plany/01-dvazhdy.flang` и так для - каждого файла с 01 по 12. -3. Видит ли разбор оба объявления: - `bootstrap/flang ast flang/test/fixtures/plany/01-dvazhdy.flang | python3 -c 'import json,sys; print(json.load(sys.stdin)["plans"])'` -4. Лежат ли сообщения правил в собранном двоичном: - `grep -ac 'объявлен дважды' bootstrap/flang` +1. `bootstrap/flang io flang/proof/probes/plan-rules-asked/run.fscript --plan Binary` + — одна команда на все четырнадцать образцов и двух судей. +2. Поимённо: `bootstrap/flang check flang/test/fixtures/plany/01-dvazhdy.flang` + и так для каждого файла с 01 по 12. +3. Тот же файл второму судье того же двоичного: + `bootstrap/flang test flang/test/fixtures/plany/01-dvazhdy.flang`. ## Что происходит +Прогон 4 октября 2026, двоичный из семени ствола `188e5a6e` +(`make -C bootstrap`), все четырнадцать образцов: + +| образец | `check` | `test` | сообщение правила, которое обязано быть | +|---|---|---|---| +| 00-tselyj | 0 | 0 | — (образец целый) | +| 01-dvazhdy | **0** | 1 | план «Работа» объявлен дважды | +| 02-slovar-zanyat | **0** | 1 | план не собран: в программе нет сумм «Отклик» | +| 03-sostoyanie-neizvestno | **0** | 1 | состояние плана — неизвестный тип «Хода» | +| 04-nachalo-neizvestno | **0** | 1 | начальное состояние — неизвестная функция «Начало» | +| 05-nachalo-s-argumentom | **0** | 1 | функция начала с 1 аргум., а обязана быть без аргументов | +| 06-nachalo-ne-tot-tip | **0** | 1 | функция начала возвращает «number», а ожидался «Ход» | +| 07-shag-neizvesten | **0** | 1 | шаг плана — неизвестная функция «Дальнейшее» | +| 08-shag-odin-argument | **0** | 1 | шаг с 1 аргум., а обязан принимать состояние и отклик | +| 09-shag-pervyj-argument | **0** | 1 | первый аргумент шага «Иное», а ожидался «Ход» | +| 10-shag-vtoroj-argument | **0** | 1 | второй аргумент шага «Ход», а ожидался «Отклик» | +| 11-shag-vozvrat | **0** | 1 | шаг возвращает «Ход», а ожидался «Продолжение» | +| 12-shag-spisok | **0** | 1 | первый аргумент шага «список», а ожидался «Ход» | +| 13-shag-dzhoker | 1 | 1 | — (отвергает проверка типов: `FLANG_UNKNOWN_NAME`) | + +Первая строка ответа `check` на подделке совпадает с ответом на целой +программе знак в знак: + ``` -$ grep -n 'использует «Проверка планов»\|«Проверить планы» от' flang/self/bootstrap/compiler.flang -17: использует «Проверка планов» -961: пусть «с планами» равно («Слить беды» от «с процессами» и («Проверить планы» от («связано».«программа»))) -1590: «Слить беды» от «с процессами» и («Проверить планы» от («связано».«программа»)) $ bootstrap/flang check flang/test/fixtures/plany/01-dvazhdy.flang -flang/test/fixtures/plany/01-dvazhdy.flang: проверено — разбор, типы, завершаемость, ядро и примеры; замечаний нет код 0 -$ bootstrap/flang ast flang/test/fixtures/plany/01-dvazhdy.flang | … ["plans"] -[{'kind': 'plan', 'name': 'Работа', 'state': 'Ход', 'initial': 'Начать', 'handler': 'Дальше', 'span': {'line': 20, 'column': 1}}, - {'kind': 'plan', 'name': 'Работа', 'state': 'Ход', 'initial': 'Начать', 'handler': 'Дальше', 'span': {'line': 25, 'column': 1}}] -$ grep -ac 'объявлен дважды' bootstrap/flang -1 +модуль «План дважды»: функций 2, из них с доказанным завершением 2; типов 4 +… 01-dvazhdy.flang: проверено — разбор, типы, завершаемость, ядро и примеры; + замечаний нет код 0 ``` -В образце 01 план «Работа» объявлен дважды. Тот же ответ и код 0 дают все -двенадцать образцов с 01 по 12. Образец 13 отвергает проверка типов -(`FLANG_UNKNOWN_NAME`, строка 11: неизвестный тип «Небывалое», код 1), и правила -планов на нём обязаны молчать. - -Двух простых объяснений вердикту нет, и шаги 3 и 4 снимают оба: поле `plans` -разобранной программы заполнено — парсер видит ОБА объявления «Работа», строки -20 и 25; сообщение правила («план „…“ объявлен дважды») лежит в собранном -двоичном. То есть модуль в замыкание ввезён и данные до него доходят, а -вердикта всё равно нет. - -Версия: flang 0.7.23. Дата прогона: 3 октября 2026. +Версия: flang 0.7.23. + +## Разбор: где правило есть, а где его спрашивают + +Четыре возможных объяснения сняты замером, по одному на каждое. + +1. **Парсер не видит второго объявления** — снято: поле `plans` разобранной + программы несёт ОБА объявления «Работа», строки 20 и 25 + (`bootstrap/flang ast … | …["plans"]`). +2. **Правил нет в двоичном** — снято: все сообщения слоя лежат в + `bootstrap/compiler_flang.c`, функция `compiler_flang_proverit_plany` + напечатана и вызывается из `compiler_flang_proverit_svyazannoe` (строка + 490762) и из `compiler_flang_zamechaniya_do_yadra` (строка 493052). +3. **Связывание теряет `plans`** — снято прямым вызовом через прогонщик: + `«Связать исходники»` на образце 01 отдаёт программу с полями + `flang, module, types, functions, legacy, plans`, и + `«Проверить планы»` на ЭТОЙ программе отвечает + `FLANG_PLAN: план «Работа» объявлен дважды`. +4. **Правила неполны или молчат** — снято: на всех двенадцати образцах + `«Проверить планы»` даёт по одному замечанию со своим сообщением, а на + целом `00` и на типовом `13` молчит. Тот же вывод даёт второй судья того + же двоичного: `flang test` отвергает все двенадцать и пропускает `00`. + +Остаётся одно: `flang check` правила НЕ СПРАШИВАЕТ. +`grep -c 'Проверить планы' bootstrap/flang_repl.c` даёт ноль, и так было с +рождения файла — `git log --all -S 'Проверить планы' -- +flang/src/emit/c/flang_repl.c` пуст. Это та же порода, что задача 7101 у +процессов, и тот же разбор: +[`docs/zettel/a-rule-inside-the-binary-is-not-a-rule-the-binary-asks.md`](../zettel/a-rule-inside-the-binary-is-not-a-rule-the-binary-asks.md). + +Прежний заголовок раздела «Где живёт правка» звал в `flang/self/io.flang` и +`flang/self/bootstrap/compiler.flang`. Замер говорит, что оба файла правы и +править в них нечего. ## Что должно быть -Каждый из двенадцати образцов отвергнут своим сообщением и кодом возврата 2; -верный образец 00 проходит. Сообщения, которые правила дают на этих образцах: - -| образец | сообщение | -|---|---| -| 01 | план объявлен дважды | -| 02 | план не собран: в программе нет суммы «Отклик» | -| 03 | состояние плана — неизвестный тип | -| 04 | начальное состояние — неизвестная функция | -| 05 | функция начала принимает довод, а обязана быть без доводов | -| 06 | функция начала возвращает не тип состояния | -| 07 | шаг плана — неизвестная функция | -| 08 | шаг принимает один довод вместо состояния и отклика | -| 09, 12 | первый довод шага не тип состояния | -| 10 | второй довод шага не «Отклик» | -| 11 | шаг возвращает не «Продолжение» | +Каждый из двенадцати образцов отвергнут своим сообщением и КОДОМ ВОЗВРАТА 1, +верный образец 00 проходит кодом 0, образец 13 отвечает одним замечанием +проверки типов. Прежняя редакция этой задачи ждала кода 2 — это ошибка: +код 2 у `check` значит «проверено НЕ ДО КОНЦА» (есть несудимая поверхность), +а замечание правила даёт код 1. Так же отвечают и подделки процессов. + +Ожидания не предсказаны: вставка тихого вызова сделана в копии дерева, +двоичный пересобран, ответы сняты прогоном и лежат построчно в +[`flang/proof/probes/plan-rules-asked/expected.tsv`](../../flang/proof/probes/plan-rules-asked/expected.tsv) +— двадцать девять строк: четырнадцать образцов у `check`, четырнадцать у +`test` и вторая строка про образец 13 (замечание ровно одно, правила планов +на нём молчат). ## Обходной путь -Нет: ошибка в объявлении плана видна только при запуске. +Есть: `flang test <файл>` на том же двоичном правила планов спрашивает и +подделку отвергает. У образцов этой папки примеров нет, поэтому `test` +здесь — чистая проверка. ## Когда задача сделана -1. Найдено, почему правила, вызываемые в исходнике компилятора, не срабатывают - в двоичном. Две причины уже исключены шагами 3 и 4 — поле `plans` заполнено, - сообщения правил в двоичном есть; остаётся показать, вызывается ли - «Проверить планы» на прогоне и что она возвращает на образце 01. -2. `bootstrap/flang check` на образцах 01–12 отвечает кодом 2 и названным - сообщением, на образце 00 — кодом 0. +1. `bootstrap/flang io flang/proof/probes/plan-rules-asked/run.fscript --plan Binary` + отвечает кодом 0: `plan-rules-asked: проб 29, разошлось 0`. Сегодня эта же + команда даёт код 1 и `разошлось 12` — ровно двенадцать образцов, и ни + одного лишнего. +2. Проба стоит короткой командой `.flangrc`: `plan-rules:probe`. 3. Живые программы дерева с объявлением `план` по-прежнему проходят - `bootstrap/flang check`: правила не отвергают верное. -4. Проба на четырнадцати образцах стоит короткой командой в `.flangrc` - (строкой `script.<имя>`: прежний файл ярлыков убран задачей 1416). - Проба отличает исправленный двоичный от нынешнего: на нынешнем она красная, - потому что образцы 01–12 отвечают кодом 0. + `bootstrap/flang check`: правила не отвергают верное. ЗАМЕРЕНО ЗАРАНЕЕ на + правленом двоичном — см. ниже. + +## Правила не отвергают верное: отрицательный контроль + +Программ дерева с объявлением `план` — 268 +(`git ls-files '*.flang' '*.fscript' | xargs grep -l '^план «'`). Каждая +прогнана `check --быстро` дважды: нынешним двоичным и правленым (ключ +`--быстро` снимает ядро и примеры, а правила планов стоят ДО них, и на +образце 01 он `FLANG_PLAN` печатает — проверено). + +| | нынешний | правленый | +|---|---|---| +| код 4 (замечаний нет, ядро не смотрели) | 264 | 252 | +| код 1 (замечания есть) | 3 | 15 | +| не мерено: предел 150 с | 1 | 1 | + +Расхождение между двоичными — РОВНО двенадцать файлов, и это сами подделки +`plany/01`…`12`: 4 → 1, `FLANG_PLAN`. Ни один другой файл дерева ответ не +сменил. Три кода 1 у нынешнего двоичного — долг, заведённый до этой задачи: +`plany/13` (`FLANG_UNKNOWN_NAME`) и два нарочно испорченных образца +`flang/proof/checker/tests/families/plan/` (`FLANG_PARSE`). Один файл +(`flang/self/bootstrap/emit-from-source.flang`) не ответил ни у того, ни у +другого за 150 с — он НЕ МЕРЕН, и зелёным его считать нельзя. ## Где живёт правка -`flang/self/io.flang` (функции «Проверить планы», «Обход планов»), -`flang/self/bootstrap/compiler.flang` (функция со строкой 961, «Ключи судимых -планов»). Правка требует перепечатки самосборной части. +`flang/src/emit/c/flang_repl.c`, функция `repl_check_sources` — задача 7706. +Перепечатки самосборной части правка НЕ требует: `bootstrap/compiler_flang.c` +уже несёт и правила, и их вызов из `«Проверить связанное»`, а содержимое +оболочки печать берёт из дерева. diff --git a/flang/proof/probes/plan-rules-asked/expected.tsv b/flang/proof/probes/plan-rules-asked/expected.tsv new file mode 100644 index 000000000..f90293d67 --- /dev/null +++ b/flang/proof/probes/plan-rules-asked/expected.tsv @@ -0,0 +1,30 @@ +program judge code word +00-tselyj.flang check 0 flang/test/fixtures/plany/00-tselyj.flang: проверено — разбор, типы, завершаемость, ядро и примеры; замечаний нет +01-dvazhdy.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/01-dvazhdy.flang, строка 25, столбец 1: план «Работа» объявлен дважды +02-slovar-zanyat.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/02-slovar-zanyat.flang, строка 23, столбец 1: план «Работа» не собран: в программе нет сумм «Отклик» — это словарь ввода-вывода, и его имена заняты собственными объявлениями +03-sostoyanie-neizvestno.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/03-sostoyanie-neizvestno.flang, строка 20, столбец 1: состояние плана «Работа» — неизвестный тип «Хода» +04-nachalo-neizvestno.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/04-nachalo-neizvestno.flang, строка 20, столбец 1: начальное состояние плана «Работа» — неизвестная функция «Начало» +05-nachalo-s-argumentom.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/05-nachalo-s-argumentom.flang, строка 21, столбец 1: начальное состояние плана «Работа» — функция «Начать» с 1 аргум., а обязана быть без аргументов +06-nachalo-ne-tot-tip.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/06-nachalo-ne-tot-tip.flang, строка 20, столбец 1: функция «Начать» плана «Работа» возвращает «number», а ожидался «Ход» +07-shag-neizvesten.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/07-shag-neizvesten.flang, строка 20, столбец 1: шаг плана «Работа» — неизвестная функция «Дальнейшее» +08-shag-odin-argument.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/08-shag-odin-argument.flang, строка 20, столбец 1: шаг плана «Работа» — функция «Дальше» с 1 аргум., а обязана принимать состояние и отклик +09-shag-pervyj-argument.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/09-shag-pervyj-argument.flang, строка 24, столбец 1: первый аргумент функции «Дальше» «Иное», а ожидался «Ход» +10-shag-vtoroj-argument.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/10-shag-vtoroj-argument.flang, строка 20, столбец 1: второй аргумент функции «Дальше» «Ход», а ожидался «Отклик» +11-shag-vozvrat.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/11-shag-vozvrat.flang, строка 20, столбец 1: функция «Дальше» плана «Работа» возвращает «Ход», а ожидался «Продолжение» +12-shag-spisok.flang check 1 FLANG_PLAN в файле flang/test/fixtures/plany/12-shag-spisok.flang, строка 16, столбец 1: первый аргумент функции «Дальше» «список», а ожидался «Ход» +13-shag-dzhoker.flang check 1 FLANG_UNKNOWN_NAME в файле flang/test/fixtures/plany/13-shag-dzhoker.flang, строка 11, столбец 1: неизвестный тип «Небывалое» +13-shag-dzhoker.flang check 1 flang/test/fixtures/plany/13-shag-dzhoker.flang: не проверено — замечаний 1 +00-tselyj.flang test 0 flang/test/fixtures/plany/00-tselyj.flang: примеров 0, прошло 0, не прошло 0 +01-dvazhdy.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/01-dvazhdy.flang, строка 25, столбец 1: план «Работа» объявлен дважды +02-slovar-zanyat.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/02-slovar-zanyat.flang, строка 23, столбец 1: план «Работа» не собран: в программе нет сумм «Отклик» — это словарь ввода-вывода, и его имена заняты собственными объявлениями +03-sostoyanie-neizvestno.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/03-sostoyanie-neizvestno.flang, строка 20, столбец 1: состояние плана «Работа» — неизвестный тип «Хода» +04-nachalo-neizvestno.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/04-nachalo-neizvestno.flang, строка 20, столбец 1: начальное состояние плана «Работа» — неизвестная функция «Начало» +05-nachalo-s-argumentom.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/05-nachalo-s-argumentom.flang, строка 21, столбец 1: начальное состояние плана «Работа» — функция «Начать» с 1 аргум., а обязана быть без аргументов +06-nachalo-ne-tot-tip.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/06-nachalo-ne-tot-tip.flang, строка 20, столбец 1: функция «Начать» плана «Работа» возвращает «number», а ожидался «Ход» +07-shag-neizvesten.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/07-shag-neizvesten.flang, строка 20, столбец 1: шаг плана «Работа» — неизвестная функция «Дальнейшее» +08-shag-odin-argument.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/08-shag-odin-argument.flang, строка 20, столбец 1: шаг плана «Работа» — функция «Дальше» с 1 аргум., а обязана принимать состояние и отклик +09-shag-pervyj-argument.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/09-shag-pervyj-argument.flang, строка 24, столбец 1: первый аргумент функции «Дальше» «Иное», а ожидался «Ход» +10-shag-vtoroj-argument.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/10-shag-vtoroj-argument.flang, строка 20, столбец 1: второй аргумент функции «Дальше» «Ход», а ожидался «Отклик» +11-shag-vozvrat.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/11-shag-vozvrat.flang, строка 20, столбец 1: функция «Дальше» плана «Работа» возвращает «Ход», а ожидался «Продолжение» +12-shag-spisok.flang test 1 FLANG_PLAN в файле flang/test/fixtures/plany/12-shag-spisok.flang, строка 16, столбец 1: первый аргумент функции «Дальше» «список», а ожидался «Ход» +13-shag-dzhoker.flang test 1 FLANG_UNKNOWN_NAME в файле flang/test/fixtures/plany/13-shag-dzhoker.flang, строка 11, столбец 1: неизвестный тип «Небывалое» diff --git a/flang/proof/probes/plan-rules-asked/run.fscript b/flang/proof/probes/plan-rules-asked/run.fscript new file mode 100644 index 000000000..e8bf4e6ff --- /dev/null +++ b/flang/proof/probes/plan-rules-asked/run.fscript @@ -0,0 +1,94 @@ +модуль «Пробы спроса о планах» + +использует «Таблица проб» из "../table.fscript" + +тотальная функция «Код расхождения» + возвращает строка + пример «расхождение набора несёт свой код» + ожидается "FLANG_PROBE_PLAN_RULES" + "FLANG_PROBE_PLAN_RULES" + +тотальная функция «Код слепоты» + возвращает строка + пример «слепота набора несёт свой код, и он не код расхождения» + ожидается "FLANG_PROBE_PLAN_RULES_CANNOT_LOOK" + "FLANG_PROBE_PLAN_RULES_CANNOT_LOOK" + +тотальная функция «Этот набор» + возвращает «Набор» + пусть рас равно («Код расхождения») + пусть сле равно («Код слепоты») + запись «Набор» с «имя» равным "plan-rules-asked" и «код расхождения» равным рас и «код слепоты» равным сле + +тотальная функция «Корпус» + возвращает строка + пример «образцы лежат там, где их завела задача 8398» + ожидается "flang/test/fixtures/plany/" + "flang/test/fixtures/plany/" + +тотальная функция «Зов» + принимает судья: строка, имя: строка + возвращает строка + пример «судья и образец складываются в одну команду» + дано судья равно "check" + дано имя равно "01-dvazhdy.flang" + ожидается "$flang check 'flang/test/fixtures/plany/01-dvazhdy.flang'" + соединить ["$flang ", судья, " '", («Корпус»), имя, "'"] по "" + +тотальная функция «Эти приметы» + принимает имя: строка, судья: строка + возвращает строка + пример «приметы называют образец и судью: двое судят одно и то же» + дано имя равно "01-dvazhdy.flang" + дано судья равно "check" + ожидается "01-dvazhdy.flang [flang check]" + соединить [имя, " [flang ", судья, "]"] по "" + +тотальная функция «Команда» + принимает части: список строки + возвращает строка + «От корня» от («С меткой» от («Зов» от («Поле» от части и 2) и («Поле» от части и 1))) + +тотальная функция «Проба из строки» + принимает части: список строки + возвращает «Проба» + пусть имя равно («Поле» от части и 1) + пусть р равно («Эти приметы» от имя и («Поле» от части и 2)) + пусть з равно («Команда» от части) + пусть ц равно («Поле» от части и 3) + пусть л равно («Поле» от части и 4) + запись «Проба» с «программа» равным имя и «приметы» равным р и «команда» равным з и «код» равным ц и «слово» равным л + +тотальная функция «Пробы» + принимает текст: строка + возвращает список «Проба» + отобразить («Строки данных» от текст) как части → («Проба из строки» от части) + +тотальная функция «Без каталога» + принимает набор: «Набор», пробы: список «Проба» + возвращает «Продолжение» + разбор пробы + случай пусто + то «Нечем смотреть» от набор и "в expected.tsv нет ни одной строки данных" + случай голова и хвост + то «Пойти по пробам» от набор и пробы и пустой список и 0 + +тотальная функция «Начать» + возвращает «Ход» + пример «план начинается с начала» + ожидается вариант «Начало» + вариант «Начало» + +тотальная функция «Дальше» + принимает ход: «Ход», отклик: «Отклик» + возвращает «Продолжение» + разбор ход + случай вариант «Ждём таблицу» + то «Без каталога» от («Этот набор») и («Пробы» от («Содержимое» от отклик)) + случай любое + то «Шаг» от («Этот набор») и ход и отклик + +план «Binary» + состояние «Ход» + начинает с «Начать» + обрабатывает «Дальше»