pub const fn sign_extend_48(x: u64) -> u64 {
((x << 16) as i64 >> 16) as u64
}
pub const fn fmix64(mut k: u64) -> u64 {
k ^= k >> 33;
k = k.wrapping_mul(0xff51afd7ed558ccd);
if cfg!(feature = "stronger_hash") {
k ^= k >> 33;
k = k.wrapping_mul(0xc4ceb9fe1a85ec53);
k ^= k >> 33;
}
k
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sign_extend_48_works() {
let positive = 0x7fff_ffff_ffff;
let result = sign_extend_48(positive);
assert_eq!(result, positive);
let negative = 0x8000_0000_0000;
let result = sign_extend_48(negative);
assert_eq!(result, 0xffff << 48 | negative);
}
}