//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// Test that UBSAN doesn't generate unsigned integer overflow diagnostics
// from within the hashing internals.

#include <utility>
#include <cstdint>
#include <limits>
#include <string>

#include "test_macros.h"

typedef std::__murmur2_or_cityhash<uint32_t> Hash32;
typedef std::__murmur2_or_cityhash<uint64_t> Hash64;

void test(const void* key, int len) {
  for (int i=1; i <= len; ++i) {
    Hash32 h1;
    Hash64 h2;
    DoNotOptimize(h1(key, i));
    DoNotOptimize(h2(key, i));
  }
}

int main(int, char**) {
  const std::string TestCases[] = {
      "abcdaoeuaoeclaoeoaeuaoeuaousaotehu]+}sthoasuthaoesutahoesutaohesutaoeusaoetuhasoetuhaoseutaoseuthaoesutaohes"
      "00000000000000000000000000000000000000000000000000000000000000000000000",
      "1237546895+54+4554985416849484213464984765465464654564565645645646546456546546"
  };
  const size_t NumCases = sizeof(TestCases)/sizeof(TestCases[0]);
  for (size_t i=0; i < NumCases; ++i)
    test(TestCases[i].data(), TestCases[i].length());

  return 0;
}
