---
slug: "MetamorphicTesting"
name: "MetamorphicTesting"
type: "Verification"
layer: "Infrastructure"
ref: "MetamorphicTesting#7129"
sema_id: "sema:MetamorphicTesting#mh:SHA-256:7129619c60f2d3773b9a985ae4365bf2dbdba782131b9c804e079142656dae9c"
tags: ["Infrastructure","Verification"]
updated: 2026-11-11
mindscape: "bootstrap"
index_url: https://mindscape.world/scapes/bootstrap.json
url: https://mindscape.world/bootstrap/MetamorphicTesting/
related: ["EmpiricalTest","Spec","DetectorSelfTest#8d48","ClosureConservationCheck","Morphproof#f5bb","Falsification#3543"]
---

# MetamorphicTesting

Test a stated relation among the outputs of several runs, which needs no exact expected answer for any single run

Layer: Infrastructure · Category: Verification

## Mechanism

Instead of checking each run against a known answer, related runs are compared: a relation states how the outputs must correspond when the inputs are changed in a stated way, as permuting the rows fed to an order-independent aggregation must leave its result unchanged. A relation may involve more than two runs. Each relation is derived, before any run, from a property the correct output must have, stated in the [Spec](https://mindscape.world/scapes/bootstrap/Spec.md) or known of the domain, never from the implementation's behaviour, and it states how a violation is decided: exactly, within a tolerance, or by a statistical test where outputs are random. Follow-up inputs are generated from source inputs, and a violation is a failure on that set of inputs. A satisfied relation shows the outputs are consistent under that relation, not that any single output is correct. It builds tests for [EmpiricalTest](https://mindscape.world/scapes/bootstrap/EmpiricalTest.md) that need no exact expected answer, including where the correct output cannot be computed independently.

## Invariants

- Each relation is derived from a stated property of the correct output, from the specification or the domain, and recorded before execution together with how a violation is decided.
- A violation is reported with the source inputs, the transformations and every output the relation involves.
- A pass is reported as consistency under the named relations, never as correctness.

## Failure modes

- Weak relation: the relation also holds for wrong implementations, for example one any constant output satisfies, so passing proves little.
- Relation read off the code: the relation is derived from the implementation's behaviour, so the test cannot disagree with it.
- Shared error: the defect changes every related output in the same way, so the relation holds.
- Tolerance creep: numeric relations get tolerances wide enough to hide real violations.

## Builds on

- [EmpiricalTest](https://mindscape.world/scapes/bootstrap/EmpiricalTest.md) (Mind; References)
- [Spec](https://mindscape.world/scapes/bootstrap/Spec.md) (Infrastructure; References)

## Used by

—

## Identity

- Sema ID: `sema:MetamorphicTesting#mh:SHA-256:7129619c60f2d3773b9a985ae4365bf2dbdba782131b9c804e079142656dae9c`
- Ref: `MetamorphicTesting#7129`

## Links

- [Pattern page](https://mindscape.world/bootstrap/MetamorphicTesting/)
- [View in the interactive graph](https://mindscape.world/bootstrap/#MetamorphicTesting)
- [JSON](https://mindscape.world/scapes/bootstrap/MetamorphicTesting.json)
- [Index of all patterns](https://mindscape.world/scapes/bootstrap.json)
