Crate surprise_me
source ·Expand description
surprise-me
Generating random type instances.
Surprise
is a simple trait whose sole purpose is to generate random things.
If you need a more sophisticated approach to prop testing and the like, check out proptest and quicktest.
Deriving the trait
use std::collections::HashMap;
use surprise_me::{Surprise, rand};
#[derive(Surprise)]
pub struct MyStruct {
a: u32,
// Optionally adjust the surprise factor with the `factor` attribute
#[factor(chance = 0.4)]
b: bool,
#[factor(min_len = 5, max_len = 10)]
c: HashMap<u8, f32>,
}
#[derive(Surprise)]
pub enum MyEnum {
// Optionally specify variant weights (no weight means 0.0)
#[weight = 0.1]
A,
#[weight = 0.6]
B {
#[factor(max_len = 25)]
a: Vec<Option<i16>>,
b: MyStruct,
},
#[weight = 0.2]
C(u8, #[factor(min = -2.0)] f32),
}
let mut rng = rand::thread_rng();
let value: MyEnum = Surprise::generate(&mut rng);
Using the trait
use surprise_me::Surprise;
use surprise_me::factors::{NumberSurprise, VecSurprise};
use surprise_me::rand; // Re-export of the rand crate
let mut rng = rand::thread_rng();
// Generate a vec filled with random bytes
let vec: Vec<u8> = Surprise::generate(&mut rng);
// Generating as above uses the type's default surprise factor.
// In the case of a vec that means a maximum length of 100.
// To fine-tune these factors, create one and pass it to the generation like so:
let factor = VecSurprise {
min_len: 0,
max_len: 10,
items: NumberSurprise {
min: b'A',
max: b'Z',
},
};
// Vec containing at most 10 random capital ASCII letter bytes
let vec: Vec<u8> = Surprise::generate_with_factor(&mut rng, &factor);
Re-exports
pub use rand;
Modules
- Surprise factors of types in the standard library
Traits
- Types (distributions) that can be used to create a random instance of
T
. - An automatically-implemented extension trait on
RngCore
providing high-level generic methods for sampling values and other convenience methods. - Trait to generate random instances of types.
Type Definitions
- The surprise factor on which the random generation of
T
depends on.
Derive Macros
- Derive macro for the
Surprise
trait.