pub const U16_MAX: u32 = u16::max_value() as u32;
pub const U32_MAX: u64 = u32::max_value() as u64;
pub fn u32_high_bits(i: u32) -> u16 {
(i >> 16) as u16
}
pub fn u32_low_bits(i: u32) -> u16 {
(i as u16)
}
pub fn u32_split_bits(i: u32) -> (u16, u16) {
(u32_high_bits(i), u32_low_bits(i))
}
pub fn u32_merge_bits(high: u16, low: u16) -> u32 {
(u32::from(high) << 16) | u32::from(low)
}
pub fn u64_high_bits(i: u64) -> u32 {
(i >> 32) as u32
}
pub fn u64_low_bits(i: u64) -> u32 {
(i as u32)
}
pub fn u64_split_bits(i: u64) -> (u32, u32) {
(u64_high_bits(i), u64_low_bits(i))
}
pub fn u64_merge_bits(high: u32, low: u32) -> u64 {
(u64::from(high) << 32) | u64::from(low)
}
#[cfg(test)]
pub mod tests {
#[test]
fn u32_high_bits_test() {
assert_eq!(
0b1010101010101010,
super::u32_high_bits(0b1010101010101010_0101010101010101),
);
}
#[test]
fn u32_low_bits_test() {
assert_eq!(
0b0101010101010101,
super::u32_low_bits(0b1010101010101010_0101010101010101),
);
}
#[test]
fn u32_split_bits_test() {
assert_eq!(
(0b1010101010101010, 0b0101010101010101),
super::u32_split_bits(0b1010101010101010_0101010101010101),
);
}
#[test]
fn u32_merge_bits_test() {
assert_eq!(
0b1010101010101010_0101010101010101,
super::u32_merge_bits(0b1010101010101010, 0b0101010101010101),
);
}
#[test]
fn u64_high_bits_test() {
assert_eq!(
0b10101010_10101010_10101010_10101010,
super::u64_high_bits(
0b10101010_10101010_10101010_10101010_01010101_01010101_01010101_01010101
),
);
}
#[test]
fn u64_low_bits_test() {
assert_eq!(
0b01010101_01010101_01010101_01010101,
super::u64_low_bits(
0b10101010_10101010_10101010_10101010_01010101_01010101_01010101_01010101
),
);
}
#[test]
fn u64_split_bits_test() {
assert_eq!(
(
0b10101010_10101010_10101010_10101010,
0b01010101_01010101_01010101_01010101
),
super::u64_split_bits(
0b10101010_10101010_10101010_10101010_01010101_01010101_01010101_01010101
),
);
}
#[test]
fn u64_merge_bits_test() {
assert_eq!(
0b10101010_10101010_10101010_10101010_01010101_01010101_01010101_01010101,
super::u64_merge_bits(
0b10101010_10101010_10101010_10101010,
0b01010101_01010101_01010101_01010101
),
);
}
}