about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorblake2-ppc <blake2-ppc>2013-08-18 15:23:42 +0200
committerblake2-ppc <blake2-ppc>2013-08-18 18:39:47 +0200
commitbfa1331cd7fb4a8a74ede969abe22004d0232184 (patch)
treea7a2315b7b7d3ba09a0c33b3867fc5a7d9819b9e /src/libstd
parent73fdacbac98b2a820684556fc8245148af3a9247 (diff)
downloadrust-bfa1331cd7fb4a8a74ede969abe22004d0232184.tar.gz
rust-bfa1331cd7fb4a8a74ede969abe22004d0232184.zip
std::hash: Add testcase for colliding hashes of tuples
Add a testcase that verifies that (s, t) and (u, v) don't collide even if
s + t == u + v (concatenation).
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/hash.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libstd/hash.rs b/src/libstd/hash.rs
index 1af885100cd..f3df42f7a43 100644
--- a/src/libstd/hash.rs
+++ b/src/libstd/hash.rs
@@ -595,4 +595,18 @@ mod tests {
     fn test_float_hashes_of_zero() {
         assert_eq!(0.0.hash(), (-0.0).hash());
     }
+
+    #[test]
+    fn test_hash_no_concat_alias() {
+        let s = ("aa", "bb");
+        let t = ("aabb", "");
+        let u = ("a", "abb");
+
+        let v = (&[1u8], &[0u8, 0], &[0u8]);
+        let w = (&[1u8, 0, 0, 0], &[], &[]);
+
+        assert!(v != w);
+        assert!(s.hash() != t.hash() && s.hash() != u.hash());
+        assert!(v.hash() != w.hash());
+    }
 }