The identity embedded in a metamutant, separate from its report number.
Schema builds use {root_relative_file, local_id}. The local id reserves every
candidate, including withheld ones, and starts at one in each file. An unrelated
file's candidate count can therefore change report numbers without changing this
file's generated code. Standalone transforms retain their integer identity.
Sites carry both identities. Coverage translates runtime identities through
index/1; the source file is already available during poison attribution, which uses file_index/1.
Both indexes are built from the current run's sites, never persisted across runs.
Summary
Functions
Map each file's emitted integers to report ids for lazy poison attribution.
Map the current run's runtime identities to report ids for coverage decoding.
The integer a Site's generated code selects on: its local id, or a standalone report id.
The runtime selection for a Site, retaining integer selection for standalone transforms.
Types
@type t() :: non_neg_integer() | {String.t(), pos_integer()}
Functions
@spec file_index([Mutare.Site.t()]) :: %{ required({String.t(), pos_integer()}) => pos_integer() }
Map each file's emitted integers to report ids for lazy poison attribution.
@spec index([Mutare.Site.t()]) :: %{required(t()) => pos_integer()}
Map the current run's runtime identities to report ids for coverage decoding.
@spec local(Mutare.Site.t()) :: non_neg_integer()
The integer a Site's generated code selects on: its local id, or a standalone report id.
@spec of(Mutare.Site.t()) :: t()
The runtime selection for a Site, retaining integer selection for standalone transforms.