byte_mutator/mutators/
bitflipper.rs1#[derive(Debug, Copy, Clone)]
4pub struct BitFlipper {}
5
6impl BitFlipper {
7 pub fn mutate(bytes: &mut [u8], i: usize, _width: u8) {
8 let i = i % (bytes.len() * 8);
9 let byte = i / 8;
10 let bit = i % 8;
11 let v: u8 = bytes[byte] ^ 1 << bit as u8;
12
13 bytes[byte] = v;
15 }
16}
17
18#[cfg(test)]
19mod tests {
20 use super::*;
21 use crate::undo_buffer::UndoBuffer;
22
23 #[test]
24 fn flip_bit() {
25 let mut buffer = UndoBuffer::new(b"foo");
26
27 BitFlipper::mutate(buffer.get_mut(), 0, 1);
30 assert_eq!(buffer.read(), b"goo");
31 }
32}