#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
pub enum MetaOperator {
OffByOne,
SwapComparison,
DropAssertion,
WeakenBound,
SwallowError,
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
pub enum MetaMutation {
CheckerMissBoundary {
component: &'static str,
boundary: &'static str,
},
CheckerSkipWitness {
component: &'static str,
},
OracleDowngrade {
component: &'static str,
},
InterpreterOffByOne {
component: &'static str,
variant: &'static str,
},
GateFalseKill {
component: &'static str,
},
CertificateBypass {
component: &'static str,
},
CompositionProofDrift {
component: &'static str,
},
Syntactic {
component: &'static str,
operator: MetaOperator,
line: usize,
column: usize,
},
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
pub enum MetaMutationClass {
CheckerCorruption,
OracleCorruption,
InterpreterCorruption,
GateCorruption,
CertificateCorruption,
CompositionProofCorruption,
HarnessCorruption,
}
#[must_use]
pub const fn class_of(mutation: MetaMutation) -> MetaMutationClass {
match mutation {
MetaMutation::CheckerMissBoundary { .. } | MetaMutation::CheckerSkipWitness { .. } => {
MetaMutationClass::CheckerCorruption
}
MetaMutation::OracleDowngrade { .. } => MetaMutationClass::OracleCorruption,
MetaMutation::InterpreterOffByOne { .. } => MetaMutationClass::InterpreterCorruption,
MetaMutation::GateFalseKill { .. } => MetaMutationClass::GateCorruption,
MetaMutation::CertificateBypass { .. } => MetaMutationClass::CertificateCorruption,
MetaMutation::CompositionProofDrift { .. } => MetaMutationClass::CompositionProofCorruption,
MetaMutation::Syntactic { .. } => MetaMutationClass::HarnessCorruption,
}
}
pub const META_MUTATION_CATALOG: &[MetaMutation] = &[
MetaMutation::CheckerMissBoundary {
component: "algebra::checker::commutative",
boundary: "u32_max_pair",
},
MetaMutation::CheckerMissBoundary {
component: "algebra::checker::associative",
boundary: "u32_max_triple",
},
MetaMutation::CheckerSkipWitness {
component: "algebra::checker::commutative",
},
MetaMutation::OracleDowngrade {
component: "oracles::resolve",
},
MetaMutation::InterpreterOffByOne {
component: "reference::eval_expr",
variant: "BinOp::Add",
},
MetaMutation::InterpreterOffByOne {
component: "reference::eval_expr",
variant: "BinOp::Shl",
},
MetaMutation::GateFalseKill {
component: "harnesses::mutation::mutation_probe",
},
MetaMutation::CertificateBypass {
component: "generator::emit",
},
MetaMutation::CompositionProofDrift {
component: "algebra::proof_token::ProofToken::from_specs",
},
];