17eb89140SRemo Senekowitsch //! Shims for ControlPlane when chaos mode is disabled. Enables 27eb89140SRemo Senekowitsch //! unconditional use of the type and its methods throughout cranelift. 37eb89140SRemo Senekowitsch 47eb89140SRemo Senekowitsch /// A shim for ControlPlane when chaos mode is disabled. 57eb89140SRemo Senekowitsch /// Please see the [crate-level documentation](crate). 67eb89140SRemo Senekowitsch #[derive(Debug, Clone, Default)] 77eb89140SRemo Senekowitsch pub struct ControlPlane { 87eb89140SRemo Senekowitsch /// prevent direct instantiation (use `default` instead) 97eb89140SRemo Senekowitsch _private: (), 107eb89140SRemo Senekowitsch } 117eb89140SRemo Senekowitsch 127eb89140SRemo Senekowitsch /// A shim for ControlPlane's `Arbitrary` implementation when chaos mode is 137eb89140SRemo Senekowitsch /// disabled. It doesn't consume any bytes and always returns a default 147eb89140SRemo Senekowitsch /// control plane. 15*55af5ac2SMarceline Cramer #[cfg(feature = "fuzz")] 167eb89140SRemo Senekowitsch impl arbitrary::Arbitrary<'_> for ControlPlane { arbitrary(_u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Self>1785118c8cSkevaundray fn arbitrary(_u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Self> { 187eb89140SRemo Senekowitsch Ok(Self::default()) 197eb89140SRemo Senekowitsch } 207eb89140SRemo Senekowitsch } 217eb89140SRemo Senekowitsch 227eb89140SRemo Senekowitsch impl ControlPlane { 237f94f80fSRemo Senekowitsch /// Set the [fuel limit](crate#fuel-limit). This variant is used when 247f94f80fSRemo Senekowitsch /// chaos mode is disabled. It doesn't do anything. set_fuel(&mut self, _fuel: u8)257f94f80fSRemo Senekowitsch pub fn set_fuel(&mut self, _fuel: u8) {} 267f94f80fSRemo Senekowitsch 277eb89140SRemo Senekowitsch /// Returns a pseudo-random boolean. This variant is used when chaos 287eb89140SRemo Senekowitsch /// mode is disabled. It always returns `false`. 297eb89140SRemo Senekowitsch #[inline] get_decision(&mut self) -> bool307eb89140SRemo Senekowitsch pub fn get_decision(&mut self) -> bool { 317eb89140SRemo Senekowitsch false 327eb89140SRemo Senekowitsch } 33fde6c6f5SRemo Senekowitsch 349fcdc7a6SRemo Senekowitsch /// Returns an arbitrary value. This variant is used when chaos mode is 359fcdc7a6SRemo Senekowitsch /// disabled. It always returns the default value. 369fcdc7a6SRemo Senekowitsch #[inline] get_arbitrary<T: Default>(&mut self) -> T37*55af5ac2SMarceline Cramer pub fn get_arbitrary<T: Default>(&mut self) -> T { 389fcdc7a6SRemo Senekowitsch T::default() 399fcdc7a6SRemo Senekowitsch } 409fcdc7a6SRemo Senekowitsch 41fde6c6f5SRemo Senekowitsch /// Shuffles the items in the slice into a pseudo-random permutation. 42fde6c6f5SRemo Senekowitsch /// This variant is used when chaos mode is disabled. It doesn't do 43fde6c6f5SRemo Senekowitsch /// anything. 44fde6c6f5SRemo Senekowitsch #[inline] shuffle<T>(&mut self, _slice: &mut [T])45fde6c6f5SRemo Senekowitsch pub fn shuffle<T>(&mut self, _slice: &mut [T]) {} 46fde6c6f5SRemo Senekowitsch 47fde6c6f5SRemo Senekowitsch /// Returns a new iterator over the same items as the input iterator in 48fde6c6f5SRemo Senekowitsch /// a pseudo-random order. This variant is used when chaos mode is 49fde6c6f5SRemo Senekowitsch /// disabled. It always returns the same order. 50fde6c6f5SRemo Senekowitsch #[inline] shuffled<T>(&mut self, iter: impl Iterator<Item = T>) -> impl Iterator<Item = T>51fde6c6f5SRemo Senekowitsch pub fn shuffled<T>(&mut self, iter: impl Iterator<Item = T>) -> impl Iterator<Item = T> { 52fde6c6f5SRemo Senekowitsch iter 53fde6c6f5SRemo Senekowitsch } 547eb89140SRemo Senekowitsch } 55