pub(crate) fn murmur_abs_hash(word: &str) -> u32 {
let raw = murmur3::murmur3_32(&mut std::io::Cursor::new(word.as_bytes()), 0)
.expect("reading from an in-memory byte slice cannot fail");
(raw as i32).unsigned_abs()
}
pub(crate) fn bm25_hash(word: &str) -> u32 {
murmur_abs_hash(word)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn murmur_abs_hash_of_a_positive_raw_value_equals_the_raw_value() {
assert_eq!(murmur_abs_hash("fruit"), 87_364_033);
}
#[test]
fn murmur_abs_hash_of_a_negative_raw_value_is_not_the_raw_unsigned_value() {
let hash = murmur_abs_hash("bat");
assert_eq!(hash, 1_528_583_113);
assert_ne!(hash, 2_766_384_183);
}
#[test]
fn bm25_hash_does_not_stem_its_own_input() {
assert_ne!(bm25_hash("baseball"), 2_068_025_269);
assert_eq!(bm25_hash("basebal"), 2_068_025_269);
}
}