1#[macro_export]
21macro_rules! hash {
22 ($e:expr) => {{
23 use ::std::{
24 collections::hash_map::DefaultHasher,
25 hash::{Hash, Hasher},
26 };
27 let mut hasher = DefaultHasher::new();
28 $e.hash(&mut hasher);
29 hasher.finish()
30 }};
31
32 ($e:expr, $hasher:expr) => {{
33 use ::std::hash::{Hash, Hasher};
34 let mut hasher = $hasher;
35 $e.hash(&mut hasher);
36 hasher.finish()
37 }};
38}
39
40#[cfg(test)]
41mod tests {
42 use std::collections::hash_map::DefaultHasher;
43
44 #[test]
45 fn hash_default() {
46 let a = "b";
47 let expected = 16_993_177_596_579_750_922;
48 let test = hash!(a);
49
50 assert_eq!(expected, test);
51 }
52
53 #[test]
54 fn hash_with_hasher() {
55 let a = "b";
56 let expected = 16_993_177_596_579_750_922;
57 let test = hash!(a, DefaultHasher::new());
58
59 assert_eq!(expected, test);
60 }
61}