Сила тестов
Вы научитесь
Как измерить набор тестов, а не любоваться им: убитые мутанты, удалённые тесты, доля пустых проходов.
Покрытие говорит, что вы прогнали; мутации говорят, чего стоит ваше прогонянье. Сила набора — счёт убитых на выбранных вами неисправностях, поведение при удалении тестов, доля проходов, исполнивших ассерт. Виджет — эталонная сторона этого измерения: все 6 эталонных битстримов на месте и прочитаны — 84.4 мс из 5 прогонов — поэтому числу скорости или силы всегда есть на что встать: на эталон, который кто-то закрепил. Измеряйте набор — или признавайтесь, что любуетесь.
Попробуйте
Измерьте одну вещь дважды, двумя способами, в стиле виджета ссылок; затем скажите, какое число вашего набора живёт без знаменателя.

The part table in far.t27 matches prjxray-db part.json, all 6 reference bitstreams are present, and bitwalk reads all 6 in 84.4 ms (best of 5).
specs/tools/trios/tri/x7-mutate.t27
// SPDX-License-Identifier: Apache-2.0
; specs/tools/trios/tri/x7-mutate.t27 -- tool gHashTag/BrowserOS:tri/x7-mutate, the `tri x7-mutate` command of the trios loop CLI
; Generated by apps/website/scripts/tools-from-trios-tri.mjs from gHashTag/BrowserOS:trios/bin/tri at 7366096248df; do not edit.
; The CLI the loop timers run (`tri drift` holds ~/.local/bin/tri to the tracked copy). It is another program than
; the Rust tri of gHashTag/t27 and the Zig tri of gHashTag/trinity, so the ID is repository-qualified.
; A card is data and carries no test block. ASCII only (L3). phi^2 + 1/phi^2 = 3 | TRINITY
module tool_trios_tri_x7_mutate;
pub const KIND : str = "tool";
pub const FAMILY : str = "tri-cli";
pub const ID : str = "gHashTag/BrowserOS:tri/x7-mutate";
pub const REPO : str = "gHashTag/BrowserOS";
pub const QUALIFIED_ID : str = "gHashTag/BrowserOS:tri/x7-mutate";
pub const SCHEMA : u32 = 2;
pub const COMMAND : str = "tri x7-mutate";
; The case arm of the dispatcher and the first line of it that does the work.
pub const VARIANT : str = "case arm `x7-mutate)`, line 1900";
pub const SOURCE : str = "trios/bin/tri";
pub const ENTRY : str = "trios/bin/tri";
pub const SOURCE_COMMIT : str = "7366096248dfb09893e9a7d1a0f1c56ced13d16e";
pub const ROUTED : bool = true;
pub const DISPATCH : str = "exec python3 \"$HOME/skills/xilinx7-bitstream-loop/scripts/x7.py\" mutate \"$@\"";
pub const DOCUMENTED : bool = true;
pub const HELP_LINE : str = "tri x7-mutate [SPEC] -- mutation catalogue: every defect must fail the spec tests AND the Vivado sweep";
pub const CATEGORY : str = "xilinx7 MVP loop (bitstream back half as .t27, skill xilinx7-bitstream-loop)";
pub const ABOUT : str = "mutation catalogue: every defect must fail the spec tests AND the Vivado sweep";
pub const ABOUT_SOURCE : str = "`tri help` (the heredoc under the help arm of trios/bin/tri)";
pub const ACTIONS : [0]str = [];
pub const ACTIONS_ABOUT : [0]str = [];
pub const ARGS : [1]str = ["[SPEC]"];
pub const AGENTS : [0]str = [];
pub const AGENTS_NOTE : str = "No source binds an agent letter to this command: the trios CLI is not named by docs/agents/AGENTS_ALPHABET.md or .claude/agents/*.md of gHashTag/t27.";
pub const WHEN_TO_USE : str = "mutation catalogue: every defect must fail the spec tests AND the Vivado sweep";
; public/term/tri-x7-mutate/meta.json lists 1 run(s) of `tri x7-mutate`; recorded with the live ~/.local/bin/tri,
; not a build of SOURCE_COMMIT. The site plays it at the end of this card.
pub const CAST : str = "term/tri-x7-mutate/session.cast";
pub const WITNESS : str = "source-parse";
pub const WITNESS_SOURCE : str = "gHashTag/BrowserOS:trios/bin/tri at 7366096248dfb09893e9a7d1a0f1c56ced13d16e, read as text (the help heredoc and the top-level case arms); the CLI was not run";
pub const ENABLED : bool = true;
Все уроки
Модуль 1 · Зачем проверять
Дизайны, которые компилируются и ошибаются; модель, которая выносит вердикт; план, записанный до кода.
Модуль 2 · Тестбенчи
Стимулы, проверки и вердикт, записанные как один spec рядом с дизайном, который они судят.
Модуль 3 · Временные диаграммы
Трасса каждого сигнала, прочитанная так, как её читает инженер по железу, и два прогона, сравнённые между собой.
Модуль 4 · Векторы соответствия
Случаи с ответом, записанным рядом, там, откуда их достанет компилятор.
Модуль 5 · Косимуляция
Spec, симулятор и плата сходятся в одном ответе на стенде Artix-7 XC7A200T, и что делать, когда не сходятся.
Модуль 6 · Покрытие
Чего коснулись тесты: строки, переключения, состояния — и что прячет это число.
Модуль 7 · Формальные методы
Ассерты, верные каждый такт; ограниченный поиск контрпримера; и почему доказательству нужна индукция.
Модуль 8 · Мутации
Ломайте дизайн нарочно и считайте, что заметили тесты.
Модуль 9 · Приёмка
Одна команда, все квитанции, чистый вердикт, который можно показать.