#random #generate #rand #surprise

surprise-me-derive

生成随机类型实例的派生宏

1 个不稳定版本

0.1.0 2023年3月21日

#99 in #rand


用于 surprise-me

MIT 许可证

36KB
796

surprise-me

生成随机类型实例。

Surprise 是一个简单的特质,其唯一目的是生成随机事物。

如果您需要更复杂的方法来进行属性测试等,请查看 proptestquicktest

特质派生

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