// RUN: %target-run-stdlib-swift
// REQUIRES: executable_test

import Swift
import SwiftPrivate
import StdlibUnittest


var HashingTestSuite = TestSuite("Hashing")

func checkHash(
  for value: UInt64,
  withKey key: (UInt64, UInt64),
  expected: UInt64,
  file: String = #file, line: UInt = #line
) {
  var hasher = _Hasher(key: key)
  hasher.append(bits: value)
  let hash = hasher.finalize()
  expectEqual(
    hash, Int(truncatingIfNeeded: expected),
    file: file, line: line)
}

HashingTestSuite.test("_Hasher/CustomKeys") {
  // This assumes _Hasher implements SipHash-1-3.
  checkHash(for: 0, withKey: (0, 0), expected: 0xbd60acb658c79e45)
  checkHash(for: 0, withKey: (0, 1), expected: 0x1ce32b0b44e61175)
  checkHash(for: 0, withKey: (1, 0), expected: 0x9c44b7c8df2ca74b)
  checkHash(for: 0, withKey: (1, 1), expected: 0x9653ca0a3b455506)
  checkHash(for: 0, withKey: (.max, .max), expected: 0x3ab336a4895e4d36)

  checkHash(for: 1, withKey: (0, 0), expected: 0x1e9f734161d62dd9)
  checkHash(for: 1, withKey: (0, 1), expected: 0xb6fcf32d09f76cba)
  checkHash(for: 1, withKey: (1, 0), expected: 0xacb556b13007504a)
  checkHash(for: 1, withKey: (1, 1), expected: 0x7defec680db51d24)
  checkHash(for: 1, withKey: (.max, .max), expected: 0x212798441870ef6b)

  checkHash(for: .max, withKey: (0, 0), expected: 0x2f205be2fec8e38d)
  checkHash(for: .max, withKey: (0, 1), expected: 0x3ff7fa33381ecf7b)
  checkHash(for: .max, withKey: (1, 0), expected: 0x404afd8eb2c4b22a)
  checkHash(for: .max, withKey: (1, 1), expected: 0x855642d657c1bd46)
  checkHash(for: .max, withKey: (.max, .max), expected: 0x5b16b7a8181980c2)
}

HashingTestSuite.test("_Hasher/DefaultKey") {
  let value: UInt64 = 0x0102030405060708

  let defaultHash = _hashValue(for: value)

  var defaultHasher = _Hasher()
  defaultHasher.append(bits: value)
  expectEqual(defaultHasher.finalize(), defaultHash)

  var customHasher = _Hasher(key: _Hasher._secretKey)
  customHasher.append(bits: value)
  expectEqual(customHasher.finalize(), defaultHash)
}

HashingTestSuite.test("_Hasher/keyOverride") {
  let value: UInt64 = 0x0102030405060708
  let expected = Int(truncatingIfNeeded: 0x661dac5d71c78013 as UInt64)

  let originalKey = _Hasher._secretKey
  _Hasher._secretKey = (1, 2)
  let hash = _hashValue(for: value)
  _Hasher._secretKey = originalKey

  expectEqual(hash, expected)
}

runAllTests()

