#[derive(Debug, Copy, Clone)]
pub struct BitFlipper {}
impl BitFlipper {
pub fn mutate(bytes: &mut [u8], i: usize, _width: u8) {
let i = i % (bytes.len() * 8);
let byte = i / 8;
let bit = i % 8;
let v: u8 = bytes[byte] ^ 1 << bit as u8;
bytes[byte] = v;
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::undo_buffer::UndoBuffer;
#[test]
fn flip_bit() {
let mut buffer = UndoBuffer::new(b"foo");
BitFlipper::mutate(buffer.get_mut(), 0, 1);
assert_eq!(buffer.read(), b"goo");
}
}