Trait Arbitrary

Source
pub trait Arbitrary:
    Clone
    + Send
    + 'static {
    // Required method
    fn arbitrary<G: Gen>(g: &mut G) -> Self;

    // Provided method
    fn shrink(&self) -> Box<dyn Iterator<Item = Self>> { ... }
}
Expand description

Arbitrary describes types whose values can be randomly generated and shrunk.

Aside from shrinking, Arbitrary is different from the std::Rand trait in that it uses a Gen to control the distribution of random values.

As of now, all types that implement Arbitrary must also implement Clone. (I’m not sure if this is a permanent restriction.)

They must also be sendable and static since every test is run in its own thread using thread::Builder::spawn, which requires the Send + 'static bounds.

Required Methods§

Source

fn arbitrary<G: Gen>(g: &mut G) -> Self

Provided Methods§

Source

fn shrink(&self) -> Box<dyn Iterator<Item = Self>>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Arbitrary for bool

Source§

fn arbitrary<G: Gen>(g: &mut G) -> bool

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = bool>>

Source§

impl Arbitrary for char

Source§

fn arbitrary<G: Gen>(g: &mut G) -> char

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = char>>

Source§

impl Arbitrary for f32

Source§

fn arbitrary<G: Gen>(g: &mut G) -> f32

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = f32>>

Source§

impl Arbitrary for f64

Source§

fn arbitrary<G: Gen>(g: &mut G) -> f64

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = f64>>

Source§

impl Arbitrary for i8

Source§

fn arbitrary<G: Gen>(g: &mut G) -> i8

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = i8>>

Source§

impl Arbitrary for i16

Source§

fn arbitrary<G: Gen>(g: &mut G) -> i16

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = i16>>

Source§

impl Arbitrary for i32

Source§

fn arbitrary<G: Gen>(g: &mut G) -> i32

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = i32>>

Source§

impl Arbitrary for i64

Source§

fn arbitrary<G: Gen>(g: &mut G) -> i64

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = i64>>

Source§

impl Arbitrary for isize

Source§

fn arbitrary<G: Gen>(g: &mut G) -> isize

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = isize>>

Source§

impl Arbitrary for u8

Source§

fn arbitrary<G: Gen>(g: &mut G) -> u8

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = u8>>

Source§

impl Arbitrary for u16

Source§

fn arbitrary<G: Gen>(g: &mut G) -> u16

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = u16>>

Source§

impl Arbitrary for u32

Source§

fn arbitrary<G: Gen>(g: &mut G) -> u32

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = u32>>

Source§

impl Arbitrary for u64

Source§

fn arbitrary<G: Gen>(g: &mut G) -> u64

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = u64>>

Source§

impl Arbitrary for ()

Source§

impl Arbitrary for usize

Source§

fn arbitrary<G: Gen>(g: &mut G) -> usize

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = usize>>

Source§

impl Arbitrary for String

Source§

fn arbitrary<G: Gen>(g: &mut G) -> String

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = String>>

Source§

impl Arbitrary for RangeFull

Source§

impl Arbitrary for Duration

Source§

fn arbitrary<G: Gen>(gen: &mut G) -> Self

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = Self>>

Source§

impl<A: Arbitrary> Arbitrary for Option<A>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> Option<A>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = Option<A>>>

Source§

impl<A: Arbitrary> Arbitrary for (A,)

Source§

fn arbitrary<GEN: Gen>(g: &mut GEN) -> (A,)

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = (A,)>>

Source§

impl<A: Arbitrary> Arbitrary for Vec<A>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> Vec<A>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = Vec<A>>>

Source§

impl<A: Arbitrary, B: Arbitrary> Arbitrary for Result<A, B>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> Result<A, B>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = Result<A, B>>>

Source§

impl<A: Arbitrary, B: Arbitrary> Arbitrary for (A, B)

Source§

fn arbitrary<GEN: Gen>(g: &mut GEN) -> (A, B)

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = (A, B)>>

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary> Arbitrary for (A, B, C)

Source§

fn arbitrary<GEN: Gen>(g: &mut GEN) -> (A, B, C)

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = (A, B, C)>>

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary> Arbitrary for (A, B, C, D)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary> Arbitrary for (A, B, C, D, E)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary> Arbitrary for (A, B, C, D, E, F)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary> Arbitrary for (A, B, C, D, E, F, G)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary, H: Arbitrary> Arbitrary for (A, B, C, D, E, F, G, H)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary, H: Arbitrary, I: Arbitrary> Arbitrary for (A, B, C, D, E, F, G, H, I)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary, H: Arbitrary, I: Arbitrary, J: Arbitrary> Arbitrary for (A, B, C, D, E, F, G, H, I, J)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary, H: Arbitrary, I: Arbitrary, J: Arbitrary, K: Arbitrary> Arbitrary for (A, B, C, D, E, F, G, H, I, J, K)

Source§

impl<A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, F: Arbitrary, G: Arbitrary, H: Arbitrary, I: Arbitrary, J: Arbitrary, K: Arbitrary, L: Arbitrary> Arbitrary for (A, B, C, D, E, F, G, H, I, J, K, L)

Source§

impl<K: Arbitrary + Eq + Hash, V: Arbitrary> Arbitrary for HashMap<K, V>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> HashMap<K, V>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = HashMap<K, V>>>

Source§

impl<K: Arbitrary + Ord, V: Arbitrary> Arbitrary for BTreeMap<K, V>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> BTreeMap<K, V>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = BTreeMap<K, V>>>

Source§

impl<T: Arbitrary + Clone + PartialOrd> Arbitrary for Range<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> Range<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = Range<T>>>

Source§

impl<T: Arbitrary + Clone + PartialOrd> Arbitrary for RangeFrom<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> RangeFrom<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = RangeFrom<T>>>

Source§

impl<T: Arbitrary + Clone + PartialOrd> Arbitrary for RangeTo<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> RangeTo<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = RangeTo<T>>>

Source§

impl<T: Arbitrary + Eq + Hash> Arbitrary for HashSet<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> HashSet<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = HashSet<T>>>

Source§

impl<T: Arbitrary + Ord> Arbitrary for BinaryHeap<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> BinaryHeap<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = BinaryHeap<T>>>

Source§

impl<T: Arbitrary + Ord> Arbitrary for BTreeSet<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> BTreeSet<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = BTreeSet<T>>>

Source§

impl<T: Arbitrary> Arbitrary for LinkedList<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> LinkedList<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = LinkedList<T>>>

Source§

impl<T: Arbitrary> Arbitrary for VecDeque<T>

Source§

fn arbitrary<G: Gen>(g: &mut G) -> VecDeque<T>

Source§

fn shrink(&self) -> Box<dyn Iterator<Item = VecDeque<T>>>

Implementors§