use super::Divergence;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct HashVector {
pub input: &'static str,
pub expected: u64,
}
#[must_use]
pub fn hash_reference_vectors() -> Vec<HashVector> {
vec![
HashVector {
input: "",
expected: 0xcbf2_9ce4_8422_2325,
},
HashVector {
input: "veles",
expected: 0x6ccb_dfb6_eb43_fc1c,
},
HashVector {
input: "tenant:acme",
expected: 0x434a_088f_8b77_5207,
},
HashVector {
input: "point:42",
expected: 0x8db6_5f18_995c_fdd7,
},
HashVector {
input: "hello world",
expected: 0x779a_65e7_023c_d2e7,
},
HashVector {
input: "café",
expected: 0x48e8_823a_cfa4_0d89,
},
]
}
#[must_use]
pub fn check_stable_hash(hash_fn: impl Fn(&str) -> u64) -> Vec<Divergence> {
let mut divergences = Vec::new();
for vector in hash_reference_vectors() {
let actual = hash_fn(vector.input);
if actual != vector.expected {
divergences.push(Divergence {
case: format!("hash_id({:?})", vector.input),
expected: format!("{:#018x}", vector.expected),
actual: format!("{actual:#018x}"),
});
}
}
divergences
}