// RUN: %target-run-simple-swift
// RUN: %target-build-swift -O %s -o %t/a.out.optimized
// RUN: %target-run %t/a.out.optimized
// REQUIRES: executable_test

import StdlibUnittest

private let testSuite = TestSuite("UnicodeScalar literals")

private struct Expressible<T: _ExpressibleByBuiltinUnicodeScalarLiteral>
  : ExpressibleByUnicodeScalarLiteral {
  var value: T
  init(unicodeScalarLiteral value: T) {
    self.value = value
  }
}

private func string(_ characters: UInt32...) -> String {
  return String(characters.map { Character(UnicodeScalar($0)!) })
}
private func expressible<T>(_ literal: Expressible<T>, as type: T.Type)
  -> String where T: CustomStringConvertible {
  return literal.value.description
}

let b = string(0x62)
let β = string(0x03_B2)
let 𝔹 = string(0x01_D5_39)

testSuite.test("String literal type") {
  expectEqual(expressible("b", as: String.self), b)
  expectEqual(expressible("β", as: String.self), β)
  expectEqual(expressible("𝔹", as: String.self), 𝔹)
}

testSuite.test("StaticString literal type") {
  expectEqual(expressible("b", as: StaticString.self), b)
  expectEqual(expressible("β", as: StaticString.self), β)
  expectEqual(expressible("𝔹", as: StaticString.self), 𝔹)
}

testSuite.test("Character literal type") {
  expectEqual(expressible("b", as: Character.self), b)
  expectEqual(expressible("β", as: Character.self), β)
  expectEqual(expressible("𝔹", as: Character.self), 𝔹)
}

testSuite.test("UnicodeScalar literal type") {
  expectEqual(expressible("b", as: UnicodeScalar.self), b)
  expectEqual(expressible("β", as: UnicodeScalar.self), β)
  expectEqual(expressible("𝔹", as: UnicodeScalar.self), 𝔹)
}

runAllTests()
