// RUN: %target-run-simple-swiftgyb
// REQUIRES: executable_test
// REQUIRES: objc_interop

import Foundation
import StdlibUnittest

let NSStringTests = TestSuite("NSString")

NSStringTests.test("String.init(_: NSString)")
  .forEach(in: ["", "a", "abc", "a\u{0301}", "\u{e1}"]) {
  input in
  let nss: NSString = NSString(utf8String: input)!
  expectEqual(input, String(nss))
}

NSStringTests.test("NSString bridges to String with custom AnyHashable")
  .forEach(in: ["", "a", "abc", "a\u{0301}", "\u{e1}"]) {
  input in
  let s = input._bridgeToObjectiveC()
  expectNotNil(s._toCustomAnyHashable())
  expectEqual(String.self, type(of: AnyHashable(s).base))
}

NSStringTests.test("AnyHashable(NSString) uses Swift String comparison rules") {
  // U+0301 COMBINING ACUTE ACCENT
  // U+00E1 LATIN SMALL LETTER A WITH ACUTE
  let nss1: NSString = NSString(utf8String: "a\u{0301}")!
  let nss2: NSString = NSString(utf8String: "\u{e1}")!
  let ah1 = AnyHashable(nss1)
  let ah2 = AnyHashable(nss2)
  expectEqual(String.self, type(of: ah1.base))
  expectEqual(String.self, type(of: ah2.base))
  checkHashable([ah1, ah2], equalityOracle: { _, _ in true })
}

runAllTests()

