use axum::body::Bytes;
use byteshuffle::unshuffle;
pub fn deshuffle(data: &Bytes, element_size: usize) -> Bytes {
assert_eq!(data.len() % element_size, 0);
let unshuffled = unshuffle(element_size, data);
unshuffled.into()
}
#[cfg(test)]
pub(crate) mod tests {
use super::*;
#[test]
fn test_deshuffle_2() {
let shuffled = [0, 2, 4, 6, 1, 3, 5, 7];
let bytes = Bytes::copy_from_slice(&shuffled);
let result = deshuffle(&bytes, 2);
let expected = [0, 1, 2, 3, 4, 5, 6, 7];
assert_eq!(expected.as_ref(), result);
}
#[test]
fn test_deshuffle_4() {
let shuffled = [0, 4, 1, 5, 2, 6, 3, 7];
let bytes = Bytes::copy_from_slice(&shuffled);
let result = deshuffle(&bytes, 4);
let expected = [0, 1, 2, 3, 4, 5, 6, 7];
assert_eq!(expected.as_ref(), result);
}
#[test]
fn test_deshuffle_8() {
let shuffled = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15];
let bytes = Bytes::copy_from_slice(&shuffled);
let result = deshuffle(&bytes, 8);
let expected = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
assert_eq!(expected.as_ref(), result);
}
}