Skip to main content

assay_sim/mutators/
bitflip.rs

1use super::Mutator;
2use anyhow::Result;
3use rand::Rng;
4
5pub struct BitFlip {
6    pub count: usize,
7}
8
9impl Mutator for BitFlip {
10    fn mutate(&self, data: &[u8]) -> Result<Vec<u8>> {
11        let mut corrupted = data.to_vec();
12        let mut rng = rand::thread_rng();
13
14        for _ in 0..self.count {
15            if corrupted.is_empty() {
16                break;
17            }
18            let idx = rng.gen_range(0..corrupted.len());
19            corrupted[idx] ^= 1 << rng.gen_range(0..8);
20        }
21
22        Ok(corrupted)
23    }
24}