Trait Arbitrary
pub trait Arbitrary: Sized + Debug
Arbitrary determines a canonical Strategy for the implementing type.
It provides the method arbitrary_with which generates a Strategy for
producing arbitrary values of the implementing type (Self). In general,
these strategies will produce the entire set of values possible for the
type, up to some size limitation or constraints set by their parameters.
When this is not desired, strategies to produce the desired values can be
built by combining Strategys as described in the crate documentation.
This trait analogous to
Haskell QuickCheck's implementation of Arbitrary.
In this interpretation of Arbitrary, Strategy is the equivalent of
the Gen monad. Unlike in QuickCheck, Arbitrary is not a core component;
types do not need to implement Arbitrary unless one wants to use
any or other free functions in this module.
Arbitrary currently only works for types which represent owned data as
opposed to borrowed data. This is a fundamental restriction of proptest
which may be lifted in the future as the generic associated types (GAT)
feature of Rust is implemented and stabilized.
If you do not have unique constraints on how to generate the data for your custom types, consider using the derive macro to implement Arbitrary
Associated Types
type Parameters: Default;The type of parameters that
arbitrary_withaccepts for configuration of the generatedStrategy. Parameters must implementDefault.type Strategy: Strategy<Value = Self>;The type of
Strategyused to generate values of typeSelf.
Required Methods
Provided Methods
fn arbitrary() -> Self::StrategyGenerates a
Strategyfor producing arbitrary values of type the implementing type (Self).Calling this for the type
Xis the equivalent of usingX::arbitrary_with(Default::default()).This method is defined in the trait for optimization for the default if you want to do that. It is a logic error to not preserve the semantics when overriding.
Implementors
impl Arbitrary for ()impl Arbitrary for AddrParseErrorimpl Arbitrary for Arc<Path>impl Arbitrary for Arc<str>impl Arbitrary for Argsimpl Arbitrary for ArgsOsimpl Arbitrary for AtomicBoolimpl Arbitrary for AtomicIsizeimpl Arbitrary for AtomicUsizeimpl Arbitrary for Barrierimpl Arbitrary for BarrierWaitResultimpl Arbitrary for BorrowErrorimpl Arbitrary for BorrowMutErrorimpl Arbitrary for Box<CStr>impl Arbitrary for Box<OsStr>impl Arbitrary for Box<Path>impl Arbitrary for Box<str>impl Arbitrary for Builderimpl Arbitrary for CStringimpl Arbitrary for Condvarimpl Arbitrary for DecodeUtf16<<Vec<u16> as IntoIterator>::IntoIter>impl Arbitrary for DecodeUtf16Errorimpl Arbitrary for DefaultHasherimpl Arbitrary for DirBuilderimpl Arbitrary for Durationimpl Arbitrary for Emptyimpl Arbitrary for Errorimpl Arbitrary for Errorimpl Arbitrary for ErrorKindimpl Arbitrary for EscapeDebugimpl Arbitrary for EscapeDefaultimpl Arbitrary for EscapeDefaultimpl Arbitrary for EscapeUnicodeimpl Arbitrary for FpCategoryimpl Arbitrary for FromBytesWithNulErrorimpl Arbitrary for FromUtf16Errorimpl Arbitrary for FromUtf8Errorimpl Arbitrary for Indeximpl Arbitrary for Instantimpl Arbitrary for IntoStringErrorimpl Arbitrary for IpAddrimpl Arbitrary for Ipv4Addrimpl Arbitrary for Ipv6Addrimpl Arbitrary for JoinPathsErrorimpl Arbitrary for NonZeroI128impl Arbitrary for NonZeroI16impl Arbitrary for NonZeroI32impl Arbitrary for NonZeroI64impl Arbitrary for NonZeroI8impl Arbitrary for NonZeroIsizeimpl Arbitrary for NonZeroU128impl Arbitrary for NonZeroU16impl Arbitrary for NonZeroU32impl Arbitrary for NonZeroU64impl Arbitrary for NonZeroU8impl Arbitrary for NonZeroUsizeimpl Arbitrary for Onceimpl Arbitrary for Option<ParseError>impl Arbitrary for Orderingimpl Arbitrary for Orderingimpl Arbitrary for OsStringimpl Arbitrary for ParseBoolErrorimpl Arbitrary for ParseCharErrorimpl Arbitrary for ParseFloatErrorimpl Arbitrary for ParseIntErrorimpl Arbitrary for PathBufimpl Arbitrary for Probabilityimpl Arbitrary for RandomStateimpl Arbitrary for RangeFullimpl Arbitrary for Rc<Path>impl Arbitrary for Rc<str>impl Arbitrary for RecvErrorimpl Arbitrary for RecvTimeoutErrorimpl Arbitrary for Repeatimpl Arbitrary for SeekFromimpl Arbitrary for Selectorimpl Arbitrary for Shutdownimpl Arbitrary for Sinkimpl Arbitrary for SizeRangeimpl Arbitrary for SocketAddrimpl Arbitrary for SocketAddrV4impl Arbitrary for SocketAddrV6impl Arbitrary for Stderrimpl Arbitrary for Stdinimpl Arbitrary for Stdoutimpl Arbitrary for Stringimpl Arbitrary for StripPrefixErrorimpl Arbitrary for SystemTimeimpl Arbitrary for TryRecvErrorimpl Arbitrary for Utf8Errorimpl Arbitrary for VarErrorimpl Arbitrary for Varsimpl Arbitrary for VarsOsimpl Arbitrary for WaitTimeoutResultimpl Arbitrary for boolimpl Arbitrary for charimpl Arbitrary for f32impl Arbitrary for f64impl Arbitrary for i128impl Arbitrary for i16impl Arbitrary for i32impl Arbitrary for i64impl Arbitrary for i8impl Arbitrary for isizeimpl Arbitrary for u128impl Arbitrary for u16impl Arbitrary for u32impl Arbitrary for u64impl Arbitrary for u8impl Arbitrary for usizeimpl<'a, T: 'a + Clone, A: Arbitrary + Iterator<Item = &'a T>> Arbitrary for Cloned<A>impl<A> Arbitrary for (Sender<A>, Receiver<A>)impl<A> Arbitrary for (SyncSender<A>, Receiver<A>)impl<A> Arbitrary for Empty<A>impl<A: Arbitrary + Borrow<B>, B: ToOwned<Owned = A> + Debug + ?Sized> Arbitrary for Cow<'static, B>impl<A: Arbitrary + BufRead> Arbitrary for Lines<A>impl<A: Arbitrary + Clone> Arbitrary for Repeat<A>impl<A: Arbitrary + Copy> Arbitrary for Cell<A>impl<A: Arbitrary + DoubleEndedIterator> Arbitrary for Rev<A>impl<A: Arbitrary + Hash + Eq> Arbitrary for HashSet<A>impl<A: Arbitrary + Hash + Eq> Arbitrary for IntoIter<A>impl<A: Arbitrary + Hash + Eq, B: Arbitrary> Arbitrary for HashMap<A, B>impl<A: Arbitrary + Hash + Eq, B: Arbitrary> Arbitrary for IntoIter<A, B>impl<A: Arbitrary + Iterator + Clone> Arbitrary for Cycle<A>impl<A: Arbitrary + Iterator> Arbitrary for Enumerate<A>impl<A: Arbitrary + Iterator> Arbitrary for Fuse<A>impl<A: Arbitrary + Iterator> Arbitrary for Skip<A>impl<A: Arbitrary + Iterator> Arbitrary for Take<A>impl<A: Arbitrary + Iterator<Item = T>, T: Debug> Arbitrary for Peekable<A>impl<A: Arbitrary + Iterator, B: Arbitrary + Iterator> Arbitrary for Zip<A, B>impl<A: Arbitrary + Ord> Arbitrary for BTreeSet<A>impl<A: Arbitrary + Ord> Arbitrary for BinaryHeap<A>impl<A: Arbitrary + Ord> Arbitrary for IntoIter<A>impl<A: Arbitrary + Ord> Arbitrary for IntoIter<A>impl<A: Arbitrary + Ord, B: Arbitrary> Arbitrary for BTreeMap<A, B>impl<A: Arbitrary + Ord, B: Arbitrary> Arbitrary for IntoIter<A, B>impl<A: Arbitrary + Read> Arbitrary for BufReader<A>impl<A: Arbitrary + Write> Arbitrary for BufWriter<A>impl<A: Arbitrary + Write> Arbitrary for LineWriter<A>impl<A: Arbitrary> Arbitrary for Arc<A>impl<A: Arbitrary> Arbitrary for Arc<[A]>impl<A: Arbitrary> Arbitrary for AssertUnwindSafe<A>impl<A: Arbitrary> Arbitrary for Bound<A>impl<A: Arbitrary> Arbitrary for Box<A>impl<A: Arbitrary> Arbitrary for Box<[A]>impl<A: Arbitrary> Arbitrary for Cursor<A>impl<A: Arbitrary> Arbitrary for Discriminant<A>impl<A: Arbitrary> Arbitrary for IntoIter<A>impl<A: Arbitrary> Arbitrary for IntoIter<A>impl<A: Arbitrary> Arbitrary for IntoIter<A>impl<A: Arbitrary> Arbitrary for IntoIter<A>impl<A: Arbitrary> Arbitrary for IntoIter<A>impl<A: Arbitrary> Arbitrary for LinkedList<A>impl<A: Arbitrary> Arbitrary for Mutex<A>impl<A: Arbitrary> Arbitrary for Once<A>impl<A: Arbitrary> Arbitrary for Option<A>impl<A: Arbitrary> Arbitrary for RangeFrom<A>impl<A: Arbitrary> Arbitrary for RangeTo<A>impl<A: Arbitrary> Arbitrary for RangeToInclusive<A>impl<A: Arbitrary> Arbitrary for Rc<A>impl<A: Arbitrary> Arbitrary for Rc<[A]>impl<A: Arbitrary> Arbitrary for RefCell<A>impl<A: Arbitrary> Arbitrary for Result<A, ParseError>impl<A: Arbitrary> Arbitrary for Result<ParseError, A>impl<A: Arbitrary> Arbitrary for Reverse<A>impl<A: Arbitrary> Arbitrary for RwLock<A>impl<A: Arbitrary> Arbitrary for Saturating<A>impl<A: Arbitrary> Arbitrary for UnsafeCell<A>impl<A: Arbitrary> Arbitrary for Vec<A>impl<A: Arbitrary> Arbitrary for VecDeque<A>impl<A: Arbitrary> Arbitrary for Wrapping<A>impl<A: Arbitrary, B: Arbitrary> Arbitrary for Result<A, B>impl<A: Arbitrary, const N: usize> Arbitrary for [A; N]impl<A: BufRead + Arbitrary> Arbitrary for Split<A>impl<A: Debug> Arbitrary for (Sender<A>, IntoIter<A>)impl<A: Debug> Arbitrary for (SyncSender<A>, IntoIter<A>)impl<A: PartialOrd + Arbitrary> Arbitrary for Range<A>impl<A: PartialOrd + Arbitrary> Arbitrary for RangeInclusive<A>impl<A: Read + Arbitrary> Arbitrary for Take<A>impl<A: Read + Arbitrary, B: Read + Arbitrary> Arbitrary for Chain<A, B>impl<H: Default + Hasher> Arbitrary for BuildHasherDefault<H>impl<P: Clone + Default, T: Arbitrary<Parameters = P>> Arbitrary for TrySendError<T>impl<T, A: Arbitrary + Iterator<Item = T>, B: Arbitrary + Iterator<Item = T>> Arbitrary for Chain<A, B>impl<T0: Arbitrary> Arbitrary for (T0,)impl<T0: Arbitrary, T1: Arbitrary> Arbitrary for (T0, T1)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary> Arbitrary for (T0, T1, T2)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary> Arbitrary for (T0, T1, T2, T3)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary, T5: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4, T5)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary, T5: Arbitrary, T6: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4, T5, T6)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary, T5: Arbitrary, T6: Arbitrary, T7: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4, T5, T6, T7)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary, T5: Arbitrary, T6: Arbitrary, T7: Arbitrary, T8: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4, T5, T6, T7, T8)impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary, T5: Arbitrary, T6: Arbitrary, T7: Arbitrary, T8: Arbitrary, T9: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)impl<T: ?Sized> Arbitrary for PhantomData<T>impl<T: Arbitrary> Arbitrary for SendError<T>