bolero_generator/
bool.rs

1use crate::{driver::Driver, TypeGenerator, TypeGeneratorWithParams, ValueGenerator};
2
3#[derive(Debug)]
4pub struct BooleanGenerator {
5    weight: f32,
6}
7
8impl Default for BooleanGenerator {
9    fn default() -> Self {
10        Self { weight: 0.5 }
11    }
12}
13
14impl ValueGenerator for bool {
15    type Output = bool;
16
17    fn generate<D: Driver>(&self, _driver: &mut D) -> Option<Self::Output> {
18        Some(*self)
19    }
20}
21
22impl BooleanGenerator {
23    pub fn weight(mut self, weight: f32) -> Self {
24        assert!((0.0..=1.0).contains(&weight));
25        self.weight = weight;
26        self
27    }
28}
29
30impl TypeGeneratorWithParams for bool {
31    type Output = BooleanGenerator;
32
33    fn gen_with() -> Self::Output {
34        Default::default()
35    }
36}
37
38impl ValueGenerator for BooleanGenerator {
39    type Output = bool;
40
41    fn generate<D: Driver>(&self, driver: &mut D) -> Option<Self::Output> {
42        driver.gen_bool(Some(self.weight))
43    }
44}
45
46impl TypeGenerator for bool {
47    fn generate<D: Driver>(driver: &mut D) -> Option<Self> {
48        driver.gen_bool(None)
49    }
50}
51
52#[test]
53fn bool_test() {
54    let _ = generator_test!(produce::<bool>());
55}
56
57#[test]
58fn bool_with_test() {
59    let _ = generator_test!(produce::<bool>().with().weight(0.1));
60}