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
sourceimpl<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
sourceimpl<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
The type of value used by functions under test generated by this Strategy. Read more
sourcefn new_tree(&self, runner: &mut TestRunner) -> NewTree<Self>
fn new_tree(&self, runner: &mut TestRunner) -> NewTree<Self>
Generate a new value tree from the given runner. Read more
sourcefn 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,
Returns a strategy which produces values transformed by the function
fun
. Read more
sourcefn prop_map_into<O: Debug>(self) -> MapInto<Self, O> where
Self: Sized,
Self::Value: Into<O>,
fn prop_map_into<O: Debug>(self) -> MapInto<Self, O> where
Self: Sized,
Self::Value: Into<O>,
Returns a strategy which produces values of type O
by transforming
Self
with Into<O>
. Read more
sourcefn 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,
Returns a strategy which produces values transformed by the function
fun
, which is additionally given a random number generator. Read more
sourcefn 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,
Maps values produced by this strategy into new strategies and picks values from those strategies. Read more
sourcefn 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,
Maps values produced by this strategy into new strategies and picks values from those strategies while considering the new strategies to be independent. Read more
sourcefn 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,
Similar to 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 more
sourcefn 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,
Returns a strategy which only produces values accepted by fun
. Read more
sourcefn 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,
Returns a strategy which only produces transformed values where fun
returns Some(value)
and rejects those where fun
returns None
. Read more
sourcefn prop_union(self, other: Self) -> Union<Self> where
Self: Sized,
fn prop_union(self, other: Self) -> Union<Self> where
Self: Sized,
Returns a strategy which picks uniformly from self
and other
. Read more
sourcefn 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,
Generate a recursive structure with self
items as leaves. Read more
sourcefn prop_shuffle(self) -> Shuffle<Self> where
Self: Sized,
Self::Value: Shuffleable,
fn prop_shuffle(self) -> Shuffle<Self> where
Self: Sized,
Self::Value: Shuffleable,
Shuffle the contents of the values produced by this strategy. Read more
sourcefn boxed(self) -> BoxedStrategy<Self::Value> where
Self: Sized + 'static,
fn boxed(self) -> BoxedStrategy<Self::Value> where
Self: Sized + 'static,
Erases the type of this Strategy
so it can be passed around as a
simple trait object. Read more
sourceimpl<T: ValueTree> ValueTree for Fuse<T>
impl<T: ValueTree> ValueTree for Fuse<T>
sourcefn simplify(&mut self) -> bool
fn simplify(&mut self) -> bool
Attempts to simplify the current value. Notionally, this sets the “high” value to the current value, and the current value to a “halfway point” between high and low, rounding towards low. Read more
sourcefn complicate(&mut self) -> bool
fn complicate(&mut self) -> bool
Attempts to partially undo the last simplification. Notionally, this sets the “low” value to one plus the current value, and the current value to a “halfway point” between high and the new low, rounding towards low. Read more
impl<T: Copy> Copy for Fuse<T>
Auto Trait Implementations
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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more