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}