use std::hash::Hasher;
use twox_hash::XxHash64;
pub fn hash_cgid(cgid: &str) -> u64 {
if cgid.is_empty() {
return 0;
}
let mut hasher = XxHash64::default();
hasher.write(cgid.as_bytes());
hasher.finish()
}
#[cfg(test)]
mod tests {
use super::hash_cgid;
#[test]
fn validate_hash_cgid() {
assert_eq!(9402033733208250942, hash_cgid("SM89P"));
assert_eq!(16745045142164894816, hash_cgid("DP0124QHYT"));
assert_eq!(15007018045908736946, hash_cgid("b086vx9VmK"));
assert_eq!(15151312625956013430, hash_cgid("abcdefghijhjuio"));
assert_eq!(
8696017447135811798,
hash_cgid("VZ9C5G6H12PC5GH7Y0ABCDEFGHIJHJUIOZZAA1")
);
}
#[test]
fn validate_hash_similar_cgids_not_equal() {
assert_ne!(hash_cgid("SM89P"), hash_cgid("sm89p"));
assert_ne!(hash_cgid("abcdefghijhjuio0"), hash_cgid("abcdefghijhjuio"));
assert_ne!(hash_cgid("B086VX9VMK "), hash_cgid("B086VX9VMK"));
assert_ne!(
hash_cgid("hfquwah9tds\u{00}"),
hash_cgid("hfquwah9tds\u{01}")
);
}
#[test]
fn validate_hash_empty_cgid_zero() {
assert_eq!(0, hash_cgid(""));
}
}