From f7bcb736ad3a43a707aa915920b309e6bb13856b Mon Sep 17 00:00:00 2001 From: nham Date: Tue, 29 Jul 2014 16:24:06 -0400 Subject: [PATCH] Implement Hash for DList --- src/libcollections/dlist.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/libcollections/dlist.rs b/src/libcollections/dlist.rs index 68b6416b69bf5..5e3ce75eb9586 100644 --- a/src/libcollections/dlist.rs +++ b/src/libcollections/dlist.rs @@ -29,6 +29,7 @@ use core::fmt; use core::iter; use core::mem; use core::ptr; +use std::hash::{Writer, Hash}; use {Collection, Mutable, Deque, MutableSeq}; @@ -707,10 +708,20 @@ impl fmt::Show for DList { } } +impl> Hash for DList { + fn hash(&self, state: &mut S) { + self.len().hash(state); + for elt in self.iter() { + elt.hash(state); + } + } +} + #[cfg(test)] mod tests { use std::prelude::*; use std::rand; + use std::hash; use test::Bencher; use test; @@ -1075,6 +1086,24 @@ mod tests { assert!(n != m); } + #[test] + fn test_hash() { + let mut x = DList::new(); + let mut y = DList::new(); + + assert!(hash::hash(&x) == hash::hash(&y)); + + x.push_back(1i); + x.push_back(2); + x.push_back(3); + + y.push_front(3i); + y.push_front(2); + y.push_front(1); + + assert!(hash::hash(&x) == hash::hash(&y)); + } + #[test] fn test_ord() { let n: DList = list_from([]);