1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
const HASHSTART: u32 = 0x1505; pub fn add(h: u32, c: u8) -> u32 { //(h + (h << 5)) ^ (c as u32) h.wrapping_shl(5).wrapping_add(h) ^ (c as u32) } pub fn hash(buf: &[u8]) -> u32 { let mut h = HASHSTART; for c in buf { h = add(h, *c); } h } #[test] fn samples() { assert_eq!(hash(b""), 0x0001505); assert_eq!(hash(b"Hello, world!"), 0x564369e8); assert_eq!(hash(b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0x40032705); }