1*91d4f369Sbjorn3 //! This module provides a primitive hash function.
2d404368dSBenjamin Bouvier 
3d404368dSBenjamin Bouvier /// A primitive hash function for matching opcodes.
simple_hash(s: &str) -> usize4d404368dSBenjamin Bouvier pub fn simple_hash(s: &str) -> usize {
5d404368dSBenjamin Bouvier     let mut h: u32 = 5381;
6d404368dSBenjamin Bouvier     for c in s.chars() {
7d404368dSBenjamin Bouvier         h = (h ^ c as u32).wrapping_add(h.rotate_right(6));
8d404368dSBenjamin Bouvier     }
9d404368dSBenjamin Bouvier     h as usize
10d404368dSBenjamin Bouvier }
11d404368dSBenjamin Bouvier 
12d404368dSBenjamin Bouvier #[cfg(test)]
13d404368dSBenjamin Bouvier mod tests {
14*91d4f369Sbjorn3     use super::simple_hash;
15d404368dSBenjamin Bouvier 
16d404368dSBenjamin Bouvier     #[test]
basic()17d404368dSBenjamin Bouvier     fn basic() {
18d404368dSBenjamin Bouvier         assert_eq!(simple_hash("Hello"), 0x2fa70c01);
19d404368dSBenjamin Bouvier         assert_eq!(simple_hash("world"), 0x5b0c31d5);
20d404368dSBenjamin Bouvier     }
21d404368dSBenjamin Bouvier }
22