use super::BitChunk;
#[inline]
pub fn merge_reversed<T>(mut current: T, mut next: T, offset: usize) -> T
where
T: BitChunk,
{
let inverse_offset = size_of::<T>() * 8 - offset;
next <<= inverse_offset;
current >>= offset;
current | next
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_merge_reversed() {
let current = 0b00000000;
let next = 0b00000001;
let result = merge_reversed::<u8>(current, next, 1);
assert_eq!(result, 0b10000000);
let current = 0b01011001;
let next = 0b01011011;
let result = merge_reversed::<u8>(current, next, 1);
assert_eq!(result, 0b10101100);
}
#[test]
fn test_merge_reversed_offset2() {
let current = 0b00000000;
let next = 0b00000001;
let result = merge_reversed::<u8>(current, next, 3);
assert_eq!(result, 0b00100000);
}
}