pub(crate) fn byteswap_inplace(data: &mut [u8], element_size: usize) {
for chunk in data.chunks_exact_mut(element_size) {
chunk.reverse();
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn byteswap_2byte() {
let mut data = vec![0x01, 0x02, 0x03, 0x04];
byteswap_inplace(&mut data, 2);
assert_eq!(data, vec![0x02, 0x01, 0x04, 0x03]);
}
#[test]
fn byteswap_4byte() {
let mut data = vec![0x01, 0x02, 0x03, 0x04];
byteswap_inplace(&mut data, 4);
assert_eq!(data, vec![0x04, 0x03, 0x02, 0x01]);
}
#[test]
fn byteswap_8byte() {
let mut data = vec![0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08];
byteswap_inplace(&mut data, 8);
assert_eq!(data, vec![0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01]);
}
#[test]
fn byteswap_1byte_is_noop() {
let mut data = vec![0xAA, 0xBB, 0xCC];
byteswap_inplace(&mut data, 1);
assert_eq!(data, vec![0xAA, 0xBB, 0xCC]);
}
#[test]
fn byteswap_empty() {
let mut data: Vec<u8> = vec![];
byteswap_inplace(&mut data, 4);
assert!(data.is_empty());
}
}