From bfa1331cd7fb4a8a74ede969abe22004d0232184 Mon Sep 17 00:00:00 2001 From: blake2-ppc Date: Sun, 18 Aug 2013 15:23:42 +0200 Subject: [PATCH] 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). --- src/libstd/hash.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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()); + } }