pub fn reverse_u8_bits(data: u8) -> u8 {
let mut result = 0;
for i in 0..8 {
let bit = (data >> i) & 1; result |= bit << (7 - i); }
result
}
pub fn reverse_u16_bits(data: u16) -> u16 {
let mut result = 0;
for i in 0..16 {
let bit = (data >> i) & 1; result |= bit << (15 - i); }
result
}
pub fn reverse_u32_bits(data: u32) -> u32 {
let mut result = 0;
for i in 0..32 {
let bit = (data >> i) & 1; result |= bit << (31 - i); }
result
}
pub fn reverse_u64_bits(data: u64) -> u64 {
let mut result = 0;
for i in 0..64 {
let bit = (data >> i) & 1; result |= bit << (63 - i); }
result
}
pub fn reverse_u128_bits(data: u128) -> u128 {
let mut result = 0;
for i in 0..128 {
let bit = (data >> i) & 1; result |= bit << (127 - i); }
result
}
#[cfg(test)]
mod test {
use super::*;
use std::fs::create_dir_all;
#[test]
pub fn test_revese_u8_bits() {
let data: u8 = 0b0000_1010;
assert_eq!(0b0101_0000, reverse_u8_bits(data));
let data: u8 = 0b1010_1010;
assert_eq!(0b0101_0101, reverse_u8_bits(data));
let data: u8 = 0b1100_0011;
assert_eq!(0b1100_0011, reverse_u8_bits(data));
}
#[test]
pub fn test_revese_u16_bits() {
let data: u16 = 0b0000_1010_0000_1010;
assert_eq!(0b0101_0000_0101_0000, reverse_u16_bits(data));
let data: u16 = 0b1010_1010_1010_1010;
assert_eq!(0b0101_0101_0101_0101, reverse_u16_bits(data));
let data: u16 = 0b1100_0011_1100_0011;
assert_eq!(0b1100_0011_1100_0011, reverse_u16_bits(data));
}
#[test]
pub fn test_revese_u32_bits() {
let data: u32 = 0b0000_1010_0000_1010_0000_1010_0000_1010;
assert_eq!(
0b0101_0000_0101_0000_0101_0000_0101_0000,
reverse_u32_bits(data)
);
let data: u32 = 0b1010_1010_1010_1010_1010_1010_1010_1010;
assert_eq!(
0b0101_0101_0101_0101_0101_0101_0101_0101,
reverse_u32_bits(data)
);
let data: u32 = 0b1100_0011_1100_0011_1100_0011_1100_0011;
assert_eq!(
0b1100_0011_1100_0011_1100_0011_1100_0011,
reverse_u32_bits(data)
);
}
#[test]
pub fn test_revese_u64_bits() {
let data: u64 =
0b0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010;
assert_eq!(
0b0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000,
reverse_u64_bits(data)
);
let data: u64 =
0b1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010;
assert_eq!(
0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101,
reverse_u64_bits(data)
);
let data: u64 =
0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011;
assert_eq!(
0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011,
reverse_u64_bits(data)
);
}
#[test]
pub fn test_revese_u128_bits() {
let data:u128=0b0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010_0000_1010;
assert_eq!(
0b0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000_0101_0000,
reverse_u128_bits(data)
);
let data: u128 =
0b1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010_1010;
assert_eq!(
0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101,
reverse_u128_bits(data)
);
let data: u128 =
0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011;
assert_eq!(
0b1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011_1100_0011,
reverse_u128_bits(data)
);
}
}