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 Bouvierpub 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