fn new_fuzzed()

in lain/src/new_fuzzed.rs [431:489]


    fn new_fuzzed<R: Rng>(
        mutator: &mut Mutator<R>,
        constraints: Option<&Constraints<Self::RangeType>>,
    ) -> Self {
        let min: Self::RangeType;
        let max: Self::RangeType;
        let weight: Weighted;
        let mut output: AsciiString;

        trace!(
            "Generating random AsciiString with constraints: {:#?}",
            constraints
        );

        // if no min/max were supplied, we'll take a conservative approach
        match constraints {
            Some(ref constraints) => {
                min = constraints.min.unwrap_or(0);
                max = constraints.max.unwrap_or(256);
                weight = constraints.weighted;
            }
            None => {
                min = 0;
                max = 256;
                weight = Weighted::None;
            }
        }

        let string_length = mutator.gen_weighted_range(min, max, weight);

        output = AsciiString {
            inner: Vec::with_capacity(string_length),
        };

        let mut idx = 0;
        let mut chr = AsciiChar::new_fuzzed(mutator, None);

        while idx < string_length {
            output.inner.push(chr.clone());

            idx += 1;
            if string_length - idx > 0 {
                if mutator.gen_chance(crate::mutator::CHANCE_TO_REPEAT_ARRAY_VALUE) {
                    let repeat_end_idx = mutator.gen_range(idx, string_length);
                    while idx < repeat_end_idx {
                        output.inner.push(chr.clone());
                        idx += 1;
                    }
                    if string_length - idx > 0 {
                        chr = AsciiChar::new_fuzzed(mutator, None);
                    }
                } else {
                    chr = AsciiChar::new_fuzzed(mutator, None);
                }
            }
        }

        output
    }