pub trait TupleMutator<T, TupleKind>: Sized + 'static where
TupleKind: RefTypes,
T: TupleStructure<TupleKind>, {
type Cache: Clone;
type MutationStep: Clone;
type ArbitraryStep: Clone;
type UnmutateToken;
type RecursingPartIndex: Clone;
Show 13 methods
fn default_arbitrary_step(&self) -> Self::ArbitraryStep;
fn complexity<'a>(
&self,
value: TupleKind::Ref,
cache: &'a Self::Cache
) -> f64;
fn validate_value<'a>(&self, value: TupleKind::Ref) -> Option<Self::Cache>;
fn default_mutation_step<'a>(
&self,
value: TupleKind::Ref,
cache: &'a Self::Cache
) -> Self::MutationStep;
fn max_complexity(&self) -> f64;
fn min_complexity(&self) -> f64;
fn ordered_arbitrary(
&self,
step: &mut Self::ArbitraryStep,
max_cplx: f64
) -> Option<(T, f64)>;
fn random_arbitrary(&self, max_cplx: f64) -> (T, f64);
fn ordered_mutate<'a>(
&self,
value: TupleKind::Mut,
cache: &'a mut Self::Cache,
step: &'a mut Self::MutationStep,
max_cplx: f64
) -> Option<(Self::UnmutateToken, f64)>;
fn random_mutate<'a>(
&self,
value: TupleKind::Mut,
cache: &'a mut Self::Cache,
max_cplx: f64
) -> (Self::UnmutateToken, f64);
fn unmutate<'a>(
&self,
value: TupleKind::Mut,
cache: &'a mut Self::Cache,
t: Self::UnmutateToken
);
fn default_recursing_part_index<'a>(
&self,
value: TupleKind::Ref,
cache: &Self::Cache
) -> Self::RecursingPartIndex;
fn recursing_part<'a, V, N>(
&self,
parent: &N,
value: TupleKind::Ref,
index: &mut Self::RecursingPartIndex
) -> Option<&'a V>
where
V: Clone + 'static,
N: Mutator<V>;
}
Expand description
A trait equivalent in every way to Mutator except that it operates
on the destructured form of types implementing TupleStructure.
Defer to the documentation of Mutator to understand the purpose of each method.
impl<T, T0, T1, T2, T3, M0, M1, M2, M3> TupleMutator<T, Tuple4<T0, T1, T2, T3>> for Tuple4Mutator<M0, M1, M2, M3> where
T: Clone + 'static,
T0: Clone + 'static,
M0: Mutator<T0>,
T1: Clone + 'static,
M1: Mutator<T1>,
T2: Clone + 'static,
M2: Mutator<T2>,
T3: Clone + 'static,
M3: Mutator<T3>,
T: TupleStructure<Tuple4<T0, T1, T2, T3>>,
impl<T, T0, T1, T2, T3, T4, M0, M1, M2, M3, M4> TupleMutator<T, Tuple5<T0, T1, T2, T3, T4>> for Tuple5Mutator<M0, M1, M2, M3, M4> where
T: Clone + 'static,
T0: Clone + 'static,
M0: Mutator<T0>,
T1: Clone + 'static,
M1: Mutator<T1>,
T2: Clone + 'static,
M2: Mutator<T2>,
T3: Clone + 'static,
M3: Mutator<T3>,
T4: Clone + 'static,
M4: Mutator<T4>,
T: TupleStructure<Tuple5<T0, T1, T2, T3, T4>>,
impl<T, T0, T1, T2, T3, T4, T5, M0, M1, M2, M3, M4, M5> TupleMutator<T, Tuple6<T0, T1, T2, T3, T4, T5>> for Tuple6Mutator<M0, M1, M2, M3, M4, M5> where
T: Clone + 'static,
T0: Clone + 'static,
M0: Mutator<T0>,
T1: Clone + 'static,
M1: Mutator<T1>,
T2: Clone + 'static,
M2: Mutator<T2>,
T3: Clone + 'static,
M3: Mutator<T3>,
T4: Clone + 'static,
M4: Mutator<T4>,
T5: Clone + 'static,
M5: Mutator<T5>,
T: TupleStructure<Tuple6<T0, T1, T2, T3, T4, T5>>,
impl<T, T0, T1, T2, T3, T4, T5, T6, M0, M1, M2, M3, M4, M5, M6> TupleMutator<T, Tuple7<T0, T1, T2, T3, T4, T5, T6>> for Tuple7Mutator<M0, M1, M2, M3, M4, M5, M6> where
T: Clone + 'static,
T0: Clone + 'static,
M0: Mutator<T0>,
T1: Clone + 'static,
M1: Mutator<T1>,
T2: Clone + 'static,
M2: Mutator<T2>,
T3: Clone + 'static,
M3: Mutator<T3>,
T4: Clone + 'static,
M4: Mutator<T4>,
T5: Clone + 'static,
M5: Mutator<T5>,
T6: Clone + 'static,
M6: Mutator<T6>,
T: TupleStructure<Tuple7<T0, T1, T2, T3, T4, T5, T6>>,
impl<T, T0, T1, T2, T3, T4, T5, T6, T7, M0, M1, M2, M3, M4, M5, M6, M7> TupleMutator<T, Tuple8<T0, T1, T2, T3, T4, T5, T6, T7>> for Tuple8Mutator<M0, M1, M2, M3, M4, M5, M6, M7> where
T: Clone + 'static,
T0: Clone + 'static,
M0: Mutator<T0>,
T1: Clone + 'static,
M1: Mutator<T1>,
T2: Clone + 'static,
M2: Mutator<T2>,
T3: Clone + 'static,
M3: Mutator<T3>,
T4: Clone + 'static,
M4: Mutator<T4>,
T5: Clone + 'static,
M5: Mutator<T5>,
T6: Clone + 'static,
M6: Mutator<T6>,
T7: Clone + 'static,
M7: Mutator<T7>,
T: TupleStructure<Tuple8<T0, T1, T2, T3, T4, T5, T6, T7>>,
impl<T, T0, T1, T2, T3, T4, T5, T6, T7, T8, M0, M1, M2, M3, M4, M5, M6, M7, M8> TupleMutator<T, Tuple9<T0, T1, T2, T3, T4, T5, T6, T7, T8>> for Tuple9Mutator<M0, M1, M2, M3, M4, M5, M6, M7, M8> where
T: Clone + 'static,
T0: Clone + 'static,
M0: Mutator<T0>,
T1: Clone + 'static,
M1: Mutator<T1>,
T2: Clone + 'static,
M2: Mutator<T2>,
T3: Clone + 'static,
M3: Mutator<T3>,
T4: Clone + 'static,
M4: Mutator<T4>,
T5: Clone + 'static,
M5: Mutator<T5>,
T6: Clone + 'static,
M6: Mutator<T6>,
T7: Clone + 'static,
M7: Mutator<T7>,
T8: Clone + 'static,
M8: Mutator<T8>,
T: TupleStructure<Tuple9<T0, T1, T2, T3, T4, T5, T6, T7, T8>>,
impl<T, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, M0, M1, M2, M3, M4, M5, M6, M7, M8, M9> TupleMutator<T, Tuple10<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>> for Tuple10Mutator<M0, M1, M2, M3, M4, M5, M6, M7, M8, M9> where
T: Clone + 'static,
T0: Clone + 'static,
M0: Mutator<T0>,
T1: Clone + 'static,
M1: Mutator<T1>,
T2: Clone + 'static,
M2: Mutator<T2>,
T3: Clone + 'static,
M3: Mutator<T3>,
T4: Clone + 'static,
M4: Mutator<T4>,
T5: Clone + 'static,
M5: Mutator<T5>,
T6: Clone + 'static,
M6: Mutator<T6>,
T7: Clone + 'static,
M7: Mutator<T7>,
T8: Clone + 'static,
M8: Mutator<T8>,
T9: Clone + 'static,
M9: Mutator<T9>,
T: TupleStructure<Tuple10<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>>,