diff --git a/src/cmp_hash.rs b/src/cmp_hash.rs index 044d4b3..b269f12 100644 --- a/src/cmp_hash.rs +++ b/src/cmp_hash.rs @@ -5,7 +5,7 @@ use std::hash::{Hash, Hasher, SipHasher}; pub fn cmp_hash(x:&K, y:&K) -> Ordering{ let mut ord = Ordering::Equal; let mut n = 0u64; - while ord.is_eq() { + while !x.eq(y) && ord.is_eq() { let mut h1 = SipHasher::new_with_keys(0, n); let mut h2 = SipHasher::new_with_keys(0, n); x.hash(&mut h1); diff --git a/src/test_mt_map.rs b/src/test_mt_map.rs index 1819883..f026cd0 100644 --- a/src/test_mt_map.rs +++ b/src/test_mt_map.rs @@ -32,6 +32,7 @@ mod tests { )] struct K { x:i32, + y:i32, } impl MsgTrait for K { @@ -40,20 +41,24 @@ mod tests { #[test] fn test_mt_map_hash() { let mut vec = vec![]; - for i in 0..20 { - let k = K { - x:i - }; - let v = K { - x:i + 1 - }; - vec.push((k, v)); + for j in 0..10 { + for i in 0..20 { + let k = K { + x: i, + y:j + }; + let v = K { + x: i + 1, + y:j + 1 + }; + vec.push((k, v)); + } + let map1 = MTMap::from_vec(vec.clone()); + let map2 = MTMap::from_vec(vec.clone()); + assert_eq!(map1, map2); + let mut hash_set = HashSet::new(); + hash_set.insert(map1); + assert!(hash_set.contains(&map2)); } - let map1 = MTMap::from_vec(vec.clone()); - let map2 = MTMap::from_vec(vec.clone()); - assert_eq!(map1, map2); - let mut hash_set = HashSet::new(); - hash_set.insert(map1); - assert!(hash_set.contains(&map2)); } } \ No newline at end of file diff --git a/src/test_mt_set.rs b/src/test_mt_set.rs index 7fe3cbb..832fb65 100644 --- a/src/test_mt_set.rs +++ b/src/test_mt_set.rs @@ -30,6 +30,7 @@ mod tests { )] struct V { x : i32, + y: i32, } impl MsgTrait for V { @@ -38,17 +39,21 @@ mod tests { #[test] fn test_mt_set_hash() { let mut vec = vec![]; - for i in 0..20 { - let v = V { - x:i - }; - vec.push(v); + for j in 0..10 { + for i in 0..20 { + let v = V { + x: i, + y: j + }; + vec.push(v); + } + let set1 = MTSet::from_vec(vec.clone()); + let set2 = MTSet::from_vec(vec.clone()); + assert_eq!(set1, set2); + let mut hash_set = HashSet::new(); + hash_set.insert(set1); + assert!(!hash_set.insert(set2.clone())); + assert!(hash_set.contains(&set2)); } - let set1 = MTSet::from_vec(vec.clone()); - let set2 = MTSet::from_vec(vec.clone()); - assert_eq!(set1, set2); - let mut hash_set = HashSet::new(); - hash_set.insert(set1); - assert!(hash_set.contains(&set2)); } } \ No newline at end of file