pub struct Fuse<T> { /* private fields */ }
Expand description
Adaptor for Strategy
and ValueTree
which guards simplify()
and
complicate()
to avoid contract violations.
This can be used as an intermediate when the caller would otherwise need
its own separate state tracking, or as a workaround for a broken
ValueTree
implementation.
This wrapper specifically has the following effects:
-
Calling
complicate()
beforesimplify()
was ever called does nothing and returnsfalse
. -
Calling
simplify()
after it has returnedfalse
and no calls tocomplicate()
returnedtrue
does nothing and returnsfalse
. -
Calling
complicate()
after it has returnedfalse
and no calls tosimplify()
returnedtrue
does nothing and returnsfalse
.
There is also limited functionality to alter the internal state to assist in its usage as a state tracker.
Wrapping a Strategy
in Fuse
simply causes its ValueTree
to also be
wrapped in Fuse
.
While this is similar to std::iter::Fuse
, it is not exposed as a method
on Strategy
since the vast majority of proptest should never need this
functionality; it mainly concerns implementors of strategies.
Implementations§
source§impl<T: ValueTree> Fuse<T>
impl<T: ValueTree> Fuse<T>
sourcepub fn may_simplify(&self) -> bool
pub fn may_simplify(&self) -> bool
Return whether a call to simplify()
may be productive.
Formally, this is true if one of the following holds:
simplify()
has never been called.- The most recent call to
simplify()
returnedtrue
. complicate()
has been called more recently thansimplify()
and the last call returnedtrue
.
sourcepub fn disallow_simplify(&mut self)
pub fn disallow_simplify(&mut self)
Disallow any further calls to simplify()
until a call to
complicate()
returns true
.
sourcepub fn may_complicate(&self) -> bool
pub fn may_complicate(&self) -> bool
Return whether a call to complicate()
may be productive.
Formally, this is true if one of the following holds:
- The most recent call to
complicate()
returnedtrue
. simplify()
has been called more recently thancomplicate()
and the last call returnedtrue
.
sourcepub fn disallow_complicate(&mut self)
pub fn disallow_complicate(&mut self)
Disallow any further calls to complicate()
until a call to
simplify()
returns true
.
Trait Implementations§
source§impl<T: Strategy> Strategy for Fuse<T>
impl<T: Strategy> Strategy for Fuse<T>
§type Value = <T as Strategy>::Value
type Value = <T as Strategy>::Value
source§fn new_tree(&self, runner: &mut TestRunner) -> NewTree<Self>
fn new_tree(&self, runner: &mut TestRunner) -> NewTree<Self>
source§fn prop_map<O: Debug, F: Fn(Self::Value) -> O>(self, fun: F) -> Map<Self, F>where
Self: Sized,
fn prop_map<O: Debug, F: Fn(Self::Value) -> O>(self, fun: F) -> Map<Self, F>where
Self: Sized,
fun
. Read moresource§fn prop_map_into<O: Debug>(self) -> MapInto<Self, O>
fn prop_map_into<O: Debug>(self) -> MapInto<Self, O>
source§fn prop_perturb<O: Debug, F: Fn(Self::Value, TestRng) -> O>(
self,
fun: F,
) -> Perturb<Self, F>where
Self: Sized,
fn prop_perturb<O: Debug, F: Fn(Self::Value, TestRng) -> O>(
self,
fun: F,
) -> Perturb<Self, F>where
Self: Sized,
fun
, which is additionally given a random number generator. Read moresource§fn prop_flat_map<S: Strategy, F: Fn(Self::Value) -> S>(
self,
fun: F,
) -> Flatten<Map<Self, F>>where
Self: Sized,
fn prop_flat_map<S: Strategy, F: Fn(Self::Value) -> S>(
self,
fun: F,
) -> Flatten<Map<Self, F>>where
Self: Sized,
source§fn prop_ind_flat_map<S: Strategy, F: Fn(Self::Value) -> S>(
self,
fun: F,
) -> IndFlatten<Map<Self, F>>where
Self: Sized,
fn prop_ind_flat_map<S: Strategy, F: Fn(Self::Value) -> S>(
self,
fun: F,
) -> IndFlatten<Map<Self, F>>where
Self: Sized,
source§fn prop_ind_flat_map2<S: Strategy, F: Fn(Self::Value) -> S>(
self,
fun: F,
) -> IndFlattenMap<Self, F>where
Self: Sized,
fn prop_ind_flat_map2<S: Strategy, F: Fn(Self::Value) -> S>(
self,
fun: F,
) -> IndFlattenMap<Self, F>where
Self: Sized,
prop_ind_flat_map()
, but produces 2-tuples with the input
generated from self
in slot 0 and the derived strategy in slot 1. Read moresource§fn prop_filter<R: Into<Reason>, F: Fn(&Self::Value) -> bool>(
self,
whence: R,
fun: F,
) -> Filter<Self, F>where
Self: Sized,
fn prop_filter<R: Into<Reason>, F: Fn(&Self::Value) -> bool>(
self,
whence: R,
fun: F,
) -> Filter<Self, F>where
Self: Sized,
fun
. Read moresource§fn prop_filter_map<F: Fn(Self::Value) -> Option<O>, O: Debug>(
self,
whence: impl Into<Reason>,
fun: F,
) -> FilterMap<Self, F>where
Self: Sized,
fn prop_filter_map<F: Fn(Self::Value) -> Option<O>, O: Debug>(
self,
whence: impl Into<Reason>,
fun: F,
) -> FilterMap<Self, F>where
Self: Sized,
fun
returns Some(value)
and rejects those where fun
returns None
. Read moresource§fn prop_union(self, other: Self) -> Union<Self>where
Self: Sized,
fn prop_union(self, other: Self) -> Union<Self>where
Self: Sized,
source§fn prop_recursive<R: Strategy<Value = Self::Value> + 'static, F: Fn(BoxedStrategy<Self::Value>) -> R>(
self,
depth: u32,
desired_size: u32,
expected_branch_size: u32,
recurse: F,
) -> Recursive<Self::Value, F>where
Self: Sized + 'static,
fn prop_recursive<R: Strategy<Value = Self::Value> + 'static, F: Fn(BoxedStrategy<Self::Value>) -> R>(
self,
depth: u32,
desired_size: u32,
expected_branch_size: u32,
recurse: F,
) -> Recursive<Self::Value, F>where
Self: Sized + 'static,
self
items as leaves. Read moresource§impl<T: ValueTree> ValueTree for Fuse<T>
impl<T: ValueTree> ValueTree for Fuse<T>
source§fn simplify(&mut self) -> bool
fn simplify(&mut self) -> bool
source§fn complicate(&mut self) -> bool
fn complicate(&mut self) -> bool
impl<T: Copy> Copy for Fuse<T>
Auto Trait Implementations§
impl<T> Freeze for Fuse<T>where
T: Freeze,
impl<T> RefUnwindSafe for Fuse<T>where
T: RefUnwindSafe,
impl<T> Send for Fuse<T>where
T: Send,
impl<T> Sync for Fuse<T>where
T: Sync,
impl<T> Unpin for Fuse<T>where
T: Unpin,
impl<T> UnwindSafe for Fuse<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)