From 1cfa6569f9078090ac317af432adf712407bd4f7 Mon Sep 17 00:00:00 2001 From: nham Date: Sat, 26 Jul 2014 22:33:47 -0400 Subject: [PATCH] Implement Hash for RingBuf --- src/libcollections/ringbuf.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/libcollections/ringbuf.rs b/src/libcollections/ringbuf.rs index dcb8628c5a6..03532051d7a 100644 --- a/src/libcollections/ringbuf.rs +++ b/src/libcollections/ringbuf.rs @@ -19,6 +19,7 @@ use core::default::Default; use core::fmt; use core::iter::RandomAccessIterator; +use std::hash::{Writer, Hash}; use {Deque, Collection, Mutable, MutableSeq}; use vec::Vec; @@ -450,6 +451,14 @@ fn ne(&self, other: &RingBuf) -> bool { } } +impl> Hash for RingBuf { + fn hash(&self, state: &mut S) { + for elt in self.iter() { + elt.hash(state); + } + } +} + impl FromIterator for RingBuf { fn from_iter>(iterator: T) -> RingBuf { let (lower, _) = iterator.size_hint(); @@ -485,6 +494,7 @@ mod tests { use std::fmt::Show; use std::prelude::*; use std::gc::{GC, Gc}; + use std::hash; use test::Bencher; use test; @@ -912,6 +922,24 @@ fn test_eq() { assert!(e == RingBuf::new()); } + #[test] + fn test_hash() { + let mut x = RingBuf::new(); + let mut y = RingBuf::new(); + + x.push(1i); + x.push(2); + x.push(3); + + y.push(0i); + y.push(1i); + y.pop_front(); + y.push(2); + y.push(3); + + assert!(hash::hash(&x) == hash::hash(&y)); + } + #[test] fn test_show() { let ringbuf: RingBuf = range(0i, 10).collect(); -- GitLab