Derive Hash for TrieMap and TrieSet
This commit is contained in:
parent
31c908b7be
commit
9e83d29f30
@ -17,6 +17,7 @@
|
||||
use core::mem::zeroed;
|
||||
use core::mem;
|
||||
use core::uint;
|
||||
use std::hash::{Writer, Hash};
|
||||
|
||||
use {Collection, Mutable, Map, MutableMap, Set, MutableSet};
|
||||
use slice::{Items, MutItems};
|
||||
@ -292,7 +293,16 @@ fn extend<Iter: Iterator<(uint, T)>>(&mut self, mut iter: Iter) {
|
||||
}
|
||||
}
|
||||
|
||||
impl<S: Writer, T: Hash<S>> Hash<S> for TrieMap<T> {
|
||||
fn hash(&self, state: &mut S) {
|
||||
for elt in self.iter() {
|
||||
elt.hash(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(missing_doc)]
|
||||
#[deriving(Hash)]
|
||||
pub struct TrieSet {
|
||||
map: TrieMap<()>
|
||||
}
|
||||
@ -1049,6 +1059,7 @@ fn bench_insert_small_low_bits(b: &mut Bencher) {
|
||||
mod test_set {
|
||||
use std::prelude::*;
|
||||
use std::uint;
|
||||
use std::hash;
|
||||
|
||||
use {MutableSet, Set};
|
||||
use super::TrieSet;
|
||||
@ -1082,4 +1093,20 @@ fn test_from_iter() {
|
||||
assert!(set.contains(x));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_hash() {
|
||||
let mut x = TrieSet::new();
|
||||
let mut y = TrieSet::new();
|
||||
|
||||
x.insert(1);
|
||||
x.insert(2);
|
||||
x.insert(3);
|
||||
|
||||
y.insert(3);
|
||||
y.insert(2);
|
||||
y.insert(1);
|
||||
|
||||
assert!(hash::hash(&x) == hash::hash(&y));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user