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