Подготовьте Native Лиспекс и npm CLI, Node.js и Bash.
В NATIVE укажите абсолютный путь к исполняемому файлу Native.
В NPM_CLI укажите путь к bin/lispex.js установленного npm-пакета.
Сначала пример запускает Native для создания отчётов. Затем команда npm vouch replay сравнивает сохранённые отчёты.
Подготовьте два случая
В новом рабочем каталоге создайте каталоги для отчётов.
mkdir -p corpus/expected candidateКоманда ничего не печатает и завершается с кодом 0. Сохраните четыре файла целиком в UTF-8 с переводами строк LF и одним завершающим переводом строки.
refund-old.lspx
(if (<= input 14) '(decision allow) '(decision deny late))refund-new.lspx
(if (<= input 13) '(decision allow) '(decision deny late))fault.lspx
(/ input 0)input.datum
14Старое правило допускает возврат на 14-й день. Новое допускает его до 13-го дня включительно.
Оба запуска fault.lspx пытаются выполнить деление на ноль.
Сохраните перечень случаев в corpus/manifest.json.
Корпус — это набор случаев, выбранный до сравнения результатов.
{
"decision_gallery": "csk.profile-decision-gallery/v0",
"cases": [
{
"stem": "refund",
"expected_transcript": [
"(decision allow)"
]
},
{
"stem": "fault",
"expected_transcript": []
}
]
}Каждое значение stem задаёт имя JSON-файла без расширения в corpus/expected.
Поле expected_transcript перечисляет ожидаемые записанные значения.
Запишите результаты обоих правил
Запустите каждый исходник с одним и тем же файлом input.datum.
"$NATIVE" diff-receipt --input input.datum refund-old.lspx > corpus/expected/refund.json
"$NATIVE" diff-receipt --input input.datum refund-new.lspx > candidate/refund.json
"$NATIVE" diff-receipt --input input.datum fault.lspx > corpus/expected/fault.json
"$NATIVE" diff-receipt --input input.datum fault.lspx > candidate/fault.jsonПервые две команды завершаются с кодом 0. Последние две возвращают код 1, поскольку деление на ноль препятствует сравнению.
Каждая команда записывает полный отчёт csk.differential-receipt/v0 в указанный файл; stderr остаётся пустым.
| Отчёт | comparison.status | Записанный результат |
|---|---|---|
corpus/expected/refund.json | agree | (decision allow) |
candidate/refund.json | agree | (decision deny late) |
Оба файла fault.json | not-comparable | Пустой список результатов и диагностика E313 |
Здесь agree означает совпадение двух способов выполнения внутри одного запуска.
Native вычисляет исходник и построенное из него представление Meaning.
Следующая команда сравнивает старый запуск с новым.
Сравните сохранённые отчёты
node "$NPM_CLI" vouch replay corpus --against candidate > replay-report.jsonКоманда завершается с кодом 1, создаёт replay-report.json и печатает в stderr:
replay found behavioral differences
- refund: reference-transcript, meaning-env-transcriptФормат отчёта — csk.replay-report/v0. Поле summary целиком:
{
"status": "changed",
"exit_code": 1,
"total": 2,
"byte_changed": 1,
"decision_changed": 1,
"not_projectable": 2,
"faults": 1
}Одно решение о возврате изменилось. Один случай содержит ошибку выполнения.
not_projectable: 2 учитывает старую и новую записи этого случая с ошибкой.
Прочитайте каждый случай
| Поле | Возврат | Ошибка |
|---|---|---|
old.status | agree | not-comparable |
new.status | agree | not-comparable |
changed | true | false |
decision.decision_changed | true | null |
Для refund поле decision.old.datum равно (decision allow).
Поле decision.new.datum равно (decision deny late).
Для fault обе стороны решения имеют status: "not_projected" и причину not-attempted-runtime-or-meaning-fault.
changed: false у случая с ошибкой означает, что сравниваемые поля отчёта остались прежними.
not-comparable означает, что выполнение не дало результатов, пригодных для сравнения.
decision_changed: null означает, что сравнить значения решений не удалось.
Прочитайте эти поля вместе, прежде чем принимать результат.
Выберите данные для сравнения
В corpus/expected находятся прежние отчёты. --against candidate выбирает каталог новых отчётов.
Сохраняйте оба набора, байты исходников и входа, а также идентификаторы исполняемых файлов.
Значение --against | Действие npm-команды |
|---|---|
| Каталог отчётов | Проверяет согласованность отчётов, затем сравнивает записанные результаты, статус сравнения, хеши входа и состав случаев |
Версия, например 1.20.0 | Проверяет записанную версию движка, привязку входа, совпадение и результаты по перечню случаев |
При указании версии команда читает существующие записи. Для получения результатов другого правила или исполняемого файла запустите Native отдельно.
Статус отчёта принимает значения unchanged, changed или failed-precondition.
Даже отчёт unchanged может содержать ошибки: читайте также faults, not_projectable и сведения о случаях.
Код 0 означает отсутствие различий при выбранном сравнении. Код 1 сообщает о различии или нарушении предварительных условий.
Ошибки использования и чтения файлов дают код 2.
Команда npm проверяет сохранённые данные. Аутентификация Ваучера и новая проверка допуска в Native выполняются отдельно. Вызывающее приложение определяет актуальность запросов и разрешений, а также возможность их повторного использования. Оно же разрешает и выполняет внешние действия.
Ваучер Лиспекса · Отчёты Ваучера · Что делает приложение после решения