Beispiel #1
0
TEST(HashTest, SSE42) {
  if (IsHWHashSupported()) {
    {
      char* stra = "abcdeFGHHHh";
      char* strb = "ABcdEfghhHH";
      uint32_t len = std::strlen(stra);

      auto const ihasha = hash_string_i(stra, len);
      auto const ihashb = hash_string_i(strb, len);

      EXPECT_EQ(ihasha, ihashb);
      EXPECT_EQ(ihasha, hash_string_i_unsafe(stra, len));
      EXPECT_EQ(hash_string_cs(stra, len), hash_string_cs_unsafe(stra, len));
    }
    {
      char buffer[256];
      char* pattern = "abCDefGH123";
      auto const len = std::strlen(pattern);
      auto const h = hash_string_i(pattern, len);

      for (char* start = buffer; start + len + 8 < buffer + sizeof(buffer);
           start += len) {
        std::memcpy(start, pattern, len);
        // Aligned version should work as long as we don't read beyond end of
        // the buffer.
        auto const aligned_hash = hash_string_i_unsafe(start, len);
        auto const unaligned_hash = hash_string_i(start, len);
        EXPECT_EQ(h, aligned_hash);
        EXPECT_EQ(h, unaligned_hash);
      }
    }
  }
}
Beispiel #2
0
NEVER_INLINE strhash_t StringData::hashHelper() const {
  assert(!isShared());
  strhash_t h = hash_string_i_unsafe(m_data, m_len);
  assert(h >= 0);
  m_hash |= h;
  return h;
}
Beispiel #3
0
TEST(HashTest, Case) {
  char* stra = "abcdeFGHHHh";
  char* strb = "ABcdEfghhHH";
  uint32_t len = std::strlen(stra);

  auto const ihasha = hash_string_i(stra, len);
  auto const ihashb = hash_string_i(strb, len);

  EXPECT_EQ(ihasha, ihashb);
  EXPECT_EQ(ihasha, hash_string_i_unsafe(stra, len));
  EXPECT_EQ(hash_string_cs(stra, len), hash_string_cs_unsafe(stra, len));
}
Beispiel #4
0
TEST(HashTest, Alignment) {
  char buffer[256];
  char* pattern = "abCDefGH123";
  auto const len = std::strlen(pattern);
  auto const h = hash_string_i(pattern, len);

  for (char* start = buffer; start + len + 8 < buffer + sizeof(buffer);
       start += len) {
    std::memcpy(start, pattern, len);
    // Aligned version should work as long as we don't read beyond end of the
    // buffer.
    auto const aligned_hash = hash_string_i_unsafe(start, len);
    auto const unaligned_hash = hash_string_i(start, len);
    EXPECT_EQ(h, aligned_hash);
    EXPECT_EQ(h, unaligned_hash);
  }
}
Beispiel #5
0
 size_t operator()(const String& s) const {
   return hash_string_i_unsafe(s.data(), s.size());
 }