//===---------- llvm/unittest/Support/DJBTest.cpp -------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

#include "llvm/Support/DJB.h"
#include "llvm/ADT/Twine.h"
#include "gtest/gtest.h"

using namespace llvm;

TEST(DJBTest, caseFolding) {
  struct TestCase {
    StringLiteral One;
    StringLiteral Two;
  };

  static constexpr TestCase Tests[] = {
      {{"ASDF"}, {"asdf"}},
      {{"qWeR"}, {"QwEr"}},
      {{"qqqqqqqqqqqqqqqqqqqq"}, {"QQQQQQQQQQQQQQQQQQQQ"}},

      {{"I"}, {"i"}},
      // Latin Small Letter Dotless I
      {{u8"\u0130"}, {"i"}},
      // Latin Capital Letter I With Dot Above
      {{u8"\u0131"}, {"i"}},

      // Latin Capital Letter A With Grave
      {{u8"\u00c0"}, {u8"\u00e0"}},
      // Latin Capital Letter A With Macron
      {{u8"\u0100"}, {u8"\u0101"}},
      // Latin Capital Letter L With Acute
      {{u8"\u0139"}, {u8"\u013a"}},
      // Cyrillic Capital Letter Ie
      {{u8"\u0415"}, {u8"\u0435"}},
      // Latin Capital Letter A With Circumflex And Grave
      {{u8"\u1ea6"}, {u8"\u1ea7"}},
      // Kelvin Sign
      {{u8"\u212a"}, {u8"\u006b"}},
      // Glagolitic Capital Letter Chrivi
      {{u8"\u2c1d"}, {u8"\u2c4d"}},
      // Fullwidth Latin Capital Letter M
      {{u8"\uff2d"}, {u8"\uff4d"}},
      // Old Hungarian Capital Letter Ej
      {{u8"\U00010c92"}, {u8"\U00010cd2"}},
  };

  for (const TestCase &T : Tests) {
    SCOPED_TRACE("Comparing '" + T.One + "' and '" + T.Two + "'");
    EXPECT_EQ(caseFoldingDjbHash(T.One), caseFoldingDjbHash(T.Two));
  }
}

TEST(DJBTest, knownValuesLowerCase) {
  struct TestCase {
    StringLiteral Text;
    uint32_t Hash;
  };
  static constexpr TestCase Tests[] = {
      {{""}, 5381u},
      {{"f"}, 177675u},
      {{"fo"}, 5863386u},
      {{"foo"}, 193491849u},
      {{"foob"}, 2090263819u},
      {{"fooba"}, 259229388u},
      {{"foobar"}, 4259602622u},
      {{"pneumonoultramicroscopicsilicovolcanoconiosis"}, 3999417781u},
  };

  for (const TestCase &T : Tests) {
    SCOPED_TRACE("Text: '" + T.Text + "'");
    EXPECT_EQ(T.Hash, djbHash(T.Text));
    EXPECT_EQ(T.Hash, caseFoldingDjbHash(T.Text));
    EXPECT_EQ(T.Hash, caseFoldingDjbHash(T.Text.upper()));
  }
}

TEST(DJBTest, knownValuesUnicode) {
  EXPECT_EQ(5866553u, djbHash(u8"\u0130"));
  EXPECT_EQ(177678u, caseFoldingDjbHash(u8"\u0130"));
  EXPECT_EQ(
      1302161417u,
      djbHash(
          u8"\u0130\u0131\u00c0\u00e0\u0100\u0101\u0139\u013a\u0415\u0435\u1ea6"
          u8"\u1ea7\u212a\u006b\u2c1d\u2c4d\uff2d\uff4d\U00010c92\U00010cd2"));
  EXPECT_EQ(
      1145571043u,
      caseFoldingDjbHash(
          u8"\u0130\u0131\u00c0\u00e0\u0100\u0101\u0139\u013a\u0415\u0435\u1ea6"
          u8"\u1ea7\u212a\u006b\u2c1d\u2c4d\uff2d\uff4d\U00010c92\U00010cd2"));
}
