pub struct GrowingSubset<Ix, T> { /* private fields */ }Expand description
A set of elements, each with an associated key, that grows over time.
This is called GrowingSubset because the universal set the subset grows
from is provided upfront. At any time, the items included form the current
subset.
GrowingSubset integrates with proptest through the
pick_item and [pick_value][GrowingSubset::
pick_value] methods.
§Examples
use diem_proptest_helpers::GrowingSubset;
let items = vec![(1, "a"), (3, "c"), (2, "b"), (2, "d")];
let mut subset: GrowingSubset<_, _> = items.into_iter().collect();
assert_eq!(subset.total_len(), 4);
assert_eq!(subset.len(), 0);
assert_eq!(subset.current(), &[]);
subset.advance_to(&2);
assert_eq!(subset.len(), 1);
assert_eq!(subset.current(), &[(1, "a")]);
subset.advance_to(&4);
assert_eq!(subset.len(), 4);
assert_eq!(subset.current(), &[(1, "a"), (2, "b"), (2, "d"), (3, "c")]);
subset.advance_to(&5);
assert_eq!(subset.len(), 4);
assert_eq!(subset.current(), &[(1, "a"), (2, "b"), (2, "d"), (3, "c")]);Implementations§
Source§impl<Ix, T> GrowingSubset<Ix, T>where
Ix: Ord,
impl<Ix, T> GrowingSubset<Ix, T>where
Ix: Ord,
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements in the current subset.
See total_len for the length of the
universal set.
Sourcepub fn total_len(&self) -> usize
pub fn total_len(&self) -> usize
Returns the total number of elements in the universal set.
This remains fixed once the GrowingSubset has been created.
Sourcepub fn current(&self) -> &[(Ix, T)]
pub fn current(&self) -> &[(Ix, T)]
Returns a slice containing the items in the current subset.
Sourcepub fn pick_item(&self, index: &Index) -> &(Ix, T)
pub fn pick_item(&self, index: &Index) -> &(Ix, T)
Chooses an (index, value) pair from the current subset using the
provided Index instance as the source
of randomness.
Sourcepub fn pick_value(&self, index: &Index) -> &T
pub fn pick_value(&self, index: &Index) -> &T
Chooses a value from the current subset using the provided
Index instance as the source of randomness.
Sourcepub fn advance_to(&mut self, to_idx: &Ix)
pub fn advance_to(&mut self, to_idx: &Ix)
Advances the valid subset to the provided index. After the end of this,
the current subset will contain all elements where the index is
less than to_idx.
If duplicate indexes exist, advance_to will cause all of the
corresponding items to be included.
It is expected that advance_to will be called with larger indexes over
time.
Trait Implementations§
Source§impl<Ix: Clone, T: Clone> Clone for GrowingSubset<Ix, T>
impl<Ix: Clone, T: Clone> Clone for GrowingSubset<Ix, T>
Source§fn clone(&self) -> GrowingSubset<Ix, T>
fn clone(&self) -> GrowingSubset<Ix, T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<Ix, T> FromIterator<(Ix, T)> for GrowingSubset<Ix, T>where
Ix: Ord,
Constructs a GrowingSubset from an iterator of (index, value) pairs.
impl<Ix, T> FromIterator<(Ix, T)> for GrowingSubset<Ix, T>where
Ix: Ord,
Constructs a GrowingSubset from an iterator of (index, value) pairs.
The input does not need to be pre-sorted.