1 个不稳定版本
0.1.0 | 2023年3月21日 |
---|
#99 in #rand
用于 surprise-me
36KB
796 行
surprise-me
生成随机类型实例。
Surprise
是一个简单的特质,其唯一目的是生成随机事物。
如果您需要更复杂的方法来进行属性测试等,请查看 proptest 和 quicktest。
特质派生
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);
特质使用
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);
依赖项
~270–720KB
~17K SLoC