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}