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