use crate::error::Error;
use crate::error::ErrorKind;
use crate::hash::MurmurHash3X64128;
pub fn compute_seed_hash(seed: u64, error_kind: ErrorKind) -> Result<u16, Error> {
use std::hash::Hasher;
let mut hasher = MurmurHash3X64128::with_seed(0);
hasher.write(&seed.to_le_bytes());
let (h1, _) = hasher.finish128();
let seed_hash = (h1 & 0xffff) as u16;
if seed_hash == 0 {
return Err(Error::new(
error_kind,
format!("seed {seed} produces a seed hash of zero; choose a different seed"),
));
}
Ok(seed_hash)
}
pub fn check_seed_hash(
expected: u16,
actual: u16,
name: &'static str,
kind: ErrorKind,
) -> Result<(), Error> {
if actual != expected {
return Err(Error::new(
kind,
format!("incompatible seed hash of {name}: expected {expected}, got {actual}"),
));
}
Ok(())
}