Trait Arbitrary
trait Arbitrary: Sized + fmt::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: TraitBound { trait_: Path { path: "Default", id: Id(57), args: None }, generic_params: [], modifier: None }The type of parameters that
arbitrary_withaccepts for configuration of the generatedStrategy. Parameters must implementDefault.type Strategy: TraitBound { trait_: Path { path: "Strategy", id: Id(62), args: Some(AngleBracketed { args: [], constraints: [AssocItemConstraint { name: "Value", args: None, binding: Equality(Type(Generic("Self"))) }] }) }, generic_params: [], modifier: None }The type of
Strategyused to generate values of typeSelf.
Required Methods
Provided Methods
fn arbitrary() -> <Self as >::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 SeekFromimpl<A: $crate::arbitrary::Arbitrary + Iterator + Clone> Arbitrary for Cycle<A>impl Arbitrary for ParseBoolErrorimpl<A: Arbitrary + Ord> Arbitrary for BTreeSet<A>impl<A: Arbitrary> Arbitrary for Bound<A>impl Arbitrary for AtomicIsizeimpl Arbitrary for IntoStringErrorimpl Arbitrary for SizeRangeimpl<A: BufRead + Arbitrary> Arbitrary for Split<A>impl Arbitrary for Errorimpl<T: ?Sized> Arbitrary for PhantomData<T>impl Arbitrary for ParseFloatErrorimpl Arbitrary for SystemTimeimpl<A: Arbitrary + Hash + Eq, B: Arbitrary> Arbitrary for IntoIter<A, B>impl Arbitrary for Arc<Path>impl Arbitrary for charimpl Arbitrary for EscapeDebugimpl Arbitrary for Stdoutimpl Arbitrary for u32impl Arbitrary for NonZeroI64impl<A: Arbitrary + Ord> Arbitrary for IntoIter<A>impl<A: Arbitrary + Write> Arbitrary for LineWriter<A>impl Arbitrary for Onceimpl<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 Arbitrary for i8impl<A: $crate::arbitrary::Arbitrary + Iterator> Arbitrary for Enumerate<A>impl Arbitrary for NonZeroU32impl Arbitrary for SocketAddrV4impl Arbitrary for FromUtf16Errorimpl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary, T5: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4, T5)impl Arbitrary for PathBufimpl<A: $crate::arbitrary::Arbitrary> Arbitrary for Arc<A>impl Arbitrary for Box<OsStr>impl<T0: Arbitrary, T1: Arbitrary> Arbitrary for (T0, T1)impl<A: fmt::Debug> Arbitrary for (Sender<A>, IntoIter<A>)impl<A: Arbitrary + Iterator> Arbitrary for Skip<A>impl<A: Arbitrary> Arbitrary for Box<[A]>impl Arbitrary for Durationimpl Arbitrary for f32impl Arbitrary for EscapeDefaultimpl Arbitrary for Box<str>impl Arbitrary for Stderrimpl Arbitrary for TryRecvErrorimpl Arbitrary for u8impl Arbitrary for NonZeroI16impl<A: Arbitrary> Arbitrary for IntoIter<A>impl<A: $crate::arbitrary::Arbitrary> Arbitrary for AssertUnwindSafe<A>impl<A: $crate::arbitrary::Arbitrary> Arbitrary for RangeTo<A>impl Arbitrary for BarrierWaitResultimpl<A: Arbitrary, N: usize> Arbitrary for [A; N]impl Arbitrary for VarsOsimpl Arbitrary for NonZeroU8impl Arbitrary for Ipv4Addrimpl Arbitrary for Rc<Path>impl<A: $crate::arbitrary::Arbitrary + Copy> Arbitrary for Cell<A>impl Arbitrary for FpCategoryimpl Arbitrary for OsStringimpl<A: Arbitrary + Iterator, B: Arbitrary + Iterator> Arbitrary for Zip<A, B>impl<A: fmt::Debug> Arbitrary for (SyncSender<A>, IntoIter<A>)impl Arbitrary for i128impl<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<A: Arbitrary> Arbitrary for Arc<[A]>impl Arbitrary for Emptyimpl<T: Arbitrary> Arbitrary for SendError<T>impl Arbitrary for i64impl<A: $crate::arbitrary::Arbitrary + DoubleEndedIterator> Arbitrary for Rev<A>impl Arbitrary for NonZeroUsizeimpl Arbitrary for BorrowMutErrorimpl<A: Arbitrary> Arbitrary for IntoIter<A>impl Arbitrary for Shutdownimpl<A: Arbitrary> Arbitrary for IntoIter<A>impl Arbitrary for RangeFullimpl<A: $crate::arbitrary::Arbitrary> Arbitrary for RwLock<A>impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary, T4: Arbitrary> Arbitrary for (T0, T1, T2, T3, T4)impl Arbitrary for ArgsOsimpl<A: Arbitrary> Arbitrary for IntoIter<A>impl<A: PartialOrd + Arbitrary> Arbitrary for RangeInclusive<A>impl Arbitrary for Errorimpl Arbitrary for Utf8Errorimpl<A: $crate::arbitrary::Arbitrary> Arbitrary for RefCell<A>impl Arbitrary for Probabilityimpl<H: Default + Hasher> Arbitrary for BuildHasherDefault<H>impl<T0: Arbitrary> Arbitrary for (T0)impl Arbitrary for AtomicUsizeimpl Arbitrary for DirBuilderimpl<A: Arbitrary> Arbitrary for Vec<A>impl<A: Read + Arbitrary> Arbitrary for Take<A>impl<A: $crate::arbitrary::Arbitrary> Arbitrary for Once<A>impl<A: Arbitrary> Arbitrary for Discriminant<A>impl Arbitrary for ParseIntErrorimpl Arbitrary for VarErrorimpl<A: Arbitrary + Ord, B: Arbitrary> Arbitrary for BTreeMap<A, B>impl Arbitrary for Stringimpl Arbitrary for Indeximpl Arbitrary for EscapeDefaultimpl<'a, T: 'a + Clone, A: Arbitrary + Iterator<Item = &'a T>> Arbitrary for Cloned<A>impl Arbitrary for ParseCharErrorimpl<A: $crate::arbitrary::Arbitrary + BufRead> Arbitrary for Lines<A>impl Arbitrary for u64impl Arbitrary for NonZeroI128impl<A: Arbitrary + Hash + Eq> Arbitrary for IntoIter<A>impl<A: Read + Arbitrary, B: Read + Arbitrary> Arbitrary for Chain<A, B>impl Arbitrary for WaitTimeoutResultimpl Arbitrary for i16impl<A: $crate::arbitrary::Arbitrary + Iterator> Arbitrary for Fuse<A>impl Arbitrary for NonZeroU64impl Arbitrary for SocketAddrV6impl Arbitrary for DefaultHasherimpl Arbitrary for FromUtf8Errorimpl Arbitrary for Orderingimpl<A: Arbitrary> Arbitrary for Result<ParseError, A>impl Arbitrary for ErrorKindimpl Arbitrary for Box<Path>impl<A: $crate::arbitrary::Arbitrary> Arbitrary for Rc<A>impl<A: Arbitrary + Ord, B: Arbitrary> Arbitrary for IntoIter<A, B>impl Arbitrary for Selectorimpl Arbitrary for AtomicBoolimpl Arbitrary for FromBytesWithNulErrorimpl Arbitrary for DecodeUtf16Errorimpl Arbitrary for Repeatimpl<A> Arbitrary for (SyncSender<A>, Receiver<A>)impl Arbitrary for Orderingimpl<A: Arbitrary + Iterator> Arbitrary for Take<A>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<A: Arbitrary> Arbitrary for Rc<[A]>impl Arbitrary for Instantimpl Arbitrary for f64impl<A: $crate::arbitrary::Arbitrary> Arbitrary for Box<A>impl Arbitrary for Stdinimpl<P: Clone + Default, T: Arbitrary<Parameters = P>> Arbitrary for TrySendError<T>impl Arbitrary for u16impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary, T3: Arbitrary> Arbitrary for (T0, T1, T2, T3)impl Arbitrary for NonZeroI32impl<A: Arbitrary + Ord> Arbitrary for IntoIter<A>impl Arbitrary for StripPrefixErrorimpl<A: $crate::arbitrary::Arbitrary> Arbitrary for RangeToInclusive<A>impl Arbitrary for Condvarimpl Arbitrary for boolimpl Arbitrary for JoinPathsErrorimpl Arbitrary for NonZeroU16impl Arbitrary for Ipv6Addrimpl Arbitrary for Arc<str>impl Arbitrary for ()impl Arbitrary for DecodeUtf16<<Vec<u16> as IntoIterator>::IntoIter>impl Arbitrary for Box<CStr>impl<A> Arbitrary for (Sender<A>, Receiver<A>)impl<T, A: Arbitrary + Iterator<Item = T>, B: Arbitrary + Iterator<Item = T>> Arbitrary for Chain<A, B>impl Arbitrary for Builderimpl Arbitrary for u128impl<A: Arbitrary> Arbitrary for VecDeque<A>impl Arbitrary for Sinkimpl Arbitrary for RecvTimeoutErrorimpl<A: Arbitrary + Ord> Arbitrary for BinaryHeap<A>impl Arbitrary for isizeimpl Arbitrary for NonZeroI8impl<A: $crate::arbitrary::Arbitrary> Arbitrary for Reverse<A>impl<A: Arbitrary> Arbitrary for IntoIter<A>impl Arbitrary for SocketAddrimpl<A: Arbitrary> Arbitrary for Result<A, ParseError>impl<A: $crate::arbitrary::Arbitrary> Arbitrary for RangeFrom<A>impl Arbitrary for Barrierimpl Arbitrary for Varsimpl<A: Arbitrary + Borrow<B>, B: ToOwned<Owned = A> + fmt::Debug + ?Sized> Arbitrary for Cow<'static, B>impl<A: PartialOrd + Arbitrary> Arbitrary for Range<A>impl Arbitrary for AddrParseErrorimpl<A: $crate::arbitrary::Arbitrary> Arbitrary for UnsafeCell<A>impl Arbitrary for Option<ParseError>impl<A: Arbitrary + Read> Arbitrary for BufReader<A>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<A: $crate::arbitrary::Arbitrary + Clone> Arbitrary for Repeat<A>impl<A: Arbitrary> Arbitrary for LinkedList<A>impl<A: $crate::arbitrary::Arbitrary> Arbitrary for Wrapping<A>impl Arbitrary for CStringimpl Arbitrary for EscapeUnicodeimpl<A: Arbitrary + Hash + Eq> Arbitrary for HashSet<A>impl<A> Arbitrary for Empty<A>impl<T0: Arbitrary, T1: Arbitrary, T2: Arbitrary> Arbitrary for (T0, T1, T2)impl Arbitrary for usizeimpl Arbitrary for NonZeroIsizeimpl<A: Arbitrary + Hash + Eq, B: Arbitrary> Arbitrary for HashMap<A, B>impl<A: $crate::arbitrary::Arbitrary> Arbitrary for Cursor<A>impl Arbitrary for RecvErrorimpl Arbitrary for i32impl<A: $crate::arbitrary::Arbitrary + Iterator<Item = T>, T: fmt::Debug> Arbitrary for Peekable<A>impl Arbitrary for Rc<str>impl Arbitrary for NonZeroU128impl Arbitrary for BorrowErrorimpl Arbitrary for IpAddrimpl<A: Arbitrary> Arbitrary for Option<A>impl Arbitrary for RandomStateimpl<A: $crate::arbitrary::Arbitrary> Arbitrary for Mutex<A>impl Arbitrary for Argsimpl<A: Arbitrary, B: Arbitrary> Arbitrary for Result<A, B>impl<A: Arbitrary + Write> Arbitrary for BufWriter<A>