Expand description
Mutation testing for Rust (unit mutation --language rust, #201) — the rung
above coverage. A test that runs a line still passes if you delete its
assertions; a surviving mutant proves it. This module wraps
cargo-mutants: it runs the engine,
reads its outcomes.json, and reports the surviving mutants the suite failed
to catch.
The gate is binary, not a percentage (equivalent mutants make a fixed score
unreachable, and a score isn’t comparable across engines) and on by default: any
un-exempted surviving mutant is a finding. This module stays a pure measurement —
measure_rust returns the survivors and unexplained_survivors is the pure
core over a parsed report; the CLI layer turns a non-empty result into the failure.
Diff-scoping (--base) is delegated to cargo-mutants’ own --in-diff: the
<base>...HEAD diff is written out and passed through, so only mutants on changed
lines are tested (“no unexplained surviving mutant on the lines you touched”).
Structs§
- Cosmic
RayLine - One line of
cosmic-ray dumpoutput: a[work_item, result]pair. The result is absent (null) for an un-executed work item. - CrMutation
- One mutation, pared to the location + operator the rule reads. cosmic-ray also
carries
occurrence,end_pos,operator_args; those are ignored. - CrResult
- A work item’s result; only the test outcome is read (
survived/killed/incompetent). - CrWork
Item - A cosmic-ray work item, pared to its one mutation’s location. (cosmic-ray models a list of mutations per item, but the operators here produce one apiece.)
- LineCol
- A line/column position; only the line is read.
- Mutant
Info - The mutant a scenario describes, pared to the location + description the report
needs. cargo-mutants also carries
function,genre,package,replacement; those are ignored. - Mutant
Outcome - One scenario’s outcome.
summaryis cargo-mutants’ result word —Successfor the unmutated baseline,CaughtMutant/MissedMutant(andTimeout/Unviable) for each mutant. - Mutants
Report - A cargo-mutants
outcomes.jsonexport, pared to what the rule reads. Unmodeled fields (total_mutants,caught, timings, …) are ignored. - Span
- A source span; only the start line is read.
- Stryker
File - One file’s mutants in a Stryker report.
- Stryker
Location - A mutant’s source location; only the start line is read (reusing
LineCol, whose extracolumnfield Stryker also provides and serde ignores). - Stryker
Mutant - One mutant, pared to the location + status + description the rule needs. Stryker
also carries
id,coveredBy,static,testsCompleted, …; those are ignored. - Stryker
Report - A Stryker
mutation.jsonreport (the mutation-testing-elements schema), pared to the fields the rule reads. Unmodeled keys (schemaVersion,thresholds,source,testFiles,projectRoot,config, …) are ignored. - Survivor
- A surviving mutant — a mutation the unit suite ran but failed to catch.
Enums§
- Scenario
- The scenario a result came from: the unmutated baseline, or one mutant. Matches
cargo-mutants’ externally-tagged JSON (
"Baseline"vs{"Mutant": {…}}).
Functions§
- evaluate
- The shared evaluation core both engines feed: drop the survivors lifted by a
mutationexemption (a file-path match), leaving the rule’s findings. Each engine produces the raw survivor list its own way (unexplained_survivorsfrom a cargo-mutants report,stryker_survivorsfrom a Stryker report); this applies the reason-required exemptions identically across languages. - measure_
python - Run cosmic-ray over the Python project at
rootand return its un-exempted survivors — the Python arm of the mutation rule (#203), parity withmeasure_rustandmeasure_typescript. - measure_
rust - Run cargo-mutants over the crate at
rootand return its un-exempted survivors. - measure_
typescript - Run Stryker over the TypeScript project at
rootand return its un-exempted survivors — the TS arm of the mutation rule (#202), parity withmeasure_rust. - parse_
cosmic_ ray_ dump - Parse
cosmic-ray dumpoutput (JSON Lines) into the surviving mutants — the raw list before exemptions. - parse_
mutants_ report - Parse a cargo-mutants
outcomes.jsonexport. - parse_
stryker_ report - Parse a Stryker
mutation.jsonreport. - stryker_
survivors - The surviving mutants in a Stryker report — the raw list before exemptions.
- unexplained_
survivors - The surviving mutants not lifted by a
mutationexemption — the rule’s findings.