Add a new test for hash collisions for short strings when PrecombineLengthMix has low quality. PiperOrigin-RevId: 778053000 Change-Id: I0be0fdb102b7ee345de81205cefe26698fdc61e6
diff --git a/absl/hash/hash_test.cc b/absl/hash/hash_test.cc index ab094a1..c100005 100644 --- a/absl/hash/hash_test.cc +++ b/absl/hash/hash_test.cc
@@ -1239,6 +1239,30 @@ EXPECT_NE(absl::HashOf(-1.0), absl::HashOf(1.0)); } +// Test for collisions in short strings if PrecombineLengthMix is low quality. +TEST(PrecombineLengthMix, ShortStringCollision) { + std::string s1 = "00"; + std::string s2 = "000"; + constexpr char kMinChar = 0; + constexpr char kMaxChar = 32; + for (s1[0] = kMinChar; s1[0] < kMaxChar; ++s1[0]) { + for (s1[1] = kMinChar; s1[1] < kMaxChar; ++s1[1]) { + for (s2[0] = kMinChar; s2[0] < kMaxChar; ++s2[0]) { + for (s2[1] = kMinChar; s2[1] < kMaxChar; ++s2[1]) { + for (s2[2] = kMinChar; s2[2] < kMaxChar; ++s2[2]) { + ASSERT_NE(absl::HashOf(s1), absl::HashOf(s2)) + << "s1[0]: " << static_cast<int>(s1[0]) + << "; s1[1]: " << static_cast<int>(s1[1]) + << "; s2[0]: " << static_cast<int>(s2[0]) + << "; s2[1]: " << static_cast<int>(s2[1]) + << "; s2[2]: " << static_cast<int>(s2[2]); + } + } + } + } + } +} + // Test that we don't cause excessive collisions on the hash table for // doubles in the range [-1024, 1024]. See cl/773069881 for more information. TEST(SwisstableCollisions, DoubleRange) {