// RUN: rm -rf %t  &&  mkdir -p %t
// RUN: %target-build-swift %s -import-objc-header %S/Inputs/Foundation_bridge.h -o %t/a.out
// RUN: %target-run %t/a.out | %FileCheck %s
// REQUIRES: executable_test

// REQUIRES: objc_interop

import Foundation

// CHECK: 17 bridges to 17
do {
  var i = 17
  let obj = _bridgeAnythingToObjectiveC(i)
  print("\(i) bridges to \(obj.description!)")
}

// CHECK: 3.14159 bridges to 3.14159
do {
  var d = 3.14159
  let obj = _bridgeAnythingToObjectiveC(d)
  print("\(d) bridges to \(obj.description!)")
}

// CHECK: Hello, world! bridges to Hello, world!
do {
  var s = "Hello, world!"
  let obj = _bridgeAnythingToObjectiveC(s)
  print("\(s) bridges to \(obj.description!)")
}

  // CHECK: int array bridges to (
  // CHECK:     1
  // CHECK:     2
  // CHECK:     3
  // CHECK: )
do {
  var a = [1, 2, 3]
  let obj = _bridgeAnythingToObjectiveC(a)
  print("int array bridges to \(obj.description!)")
}

  // CHECK: uint array bridges to (
  // CHECK:     1
  // CHECK:     2
  // CHECK:     3
  // CHECK: )
do {
  var aui: [UInt] = [1, 2, 3]
  let obj = _bridgeAnythingToObjectiveC(aui)
  print("uint array bridges to \(obj.description!)")
}

// CHECK: float array bridges to (
// CHECK:     1.5
// CHECK:     2.5
// CHECK:     3.5
// CHECK: )
do {
  var af: [Float] = [1.5, 2.5, 3.5]
  let obj = _bridgeAnythingToObjectiveC(af)
  print("float array bridges to \(obj.description!)")
}

// CHECK: double array bridges to (
// CHECK:     1.5
// CHECK:     2.5
// CHECK:     3.5
// CHECK: )
do {
  var ad = [1.5, 2.5, 3.5]
  let obj = _bridgeAnythingToObjectiveC(ad)
  print("double array bridges to \(obj.description!)")
}

// CHECK: string array bridges to (
// CHECK:     Hello
// CHECK:     Swift
// CHECK:     World
// CHECK: )
do {
  var a2 = ["Hello", "Swift", "World"]
  let obj = _bridgeAnythingToObjectiveC(a2)
  print("string array bridges to \(obj.description!)")
}

// CHECK: bool array bridges to (
// CHECK:     0
// CHECK:     1
// CHECK:     0
// CHECK: )
do {
  var ab = [false, true, false]
  let obj = _bridgeAnythingToObjectiveC(ab)
  print("bool array bridges to \(obj.description!)")
}

// CHECK: tuple array bridges to (
// CHECK:   (1, 1)
// CHECK:   (1, 1)
// CHECK:   (1, 2)
// CHECK: )
do {
  var a3 = [(1, 1), (1, 1), (1, 2)]
  let obj = _bridgeAnythingToObjectiveC(a3)
  print("tuple array bridges to \(obj.description!)")
}

// CHECK:      dictionary bridges to {
// CHECK-NEXT:   2 = World;
// CHECK-NEXT:   1 = Hello;
// CHECK-NEXT: }
do {
  var dict: Dictionary<NSNumber, NSString> = [1: "Hello", 2: "World"]
  let obj = _bridgeAnythingToObjectiveC(dict)
  print("dictionary bridges to \(obj.description!)")
}

// CHECK:      dictionary bridges to {
// CHECK-NEXT:   2 = World;
// CHECK-NEXT:   1 = Hello;
// CHECK-NEXT: }
do {
  var dict2 = [1: "Hello", 2: "World"]
  let obj = _bridgeAnythingToObjectiveC(dict2)
  print("dictionary bridges to \(obj.description!)")
}

// CHECK: dictionary bridges to {
// CHECK-NEXT:   2 = "(\"World\", 2)";
// CHECK-NEXT:   1 = "(\"Hello\", 1)";
// CHECK-NEXT: }
do {
  var dict3 = [1: ("Hello", 1), 2: ("World", 2)]
  let obj = _bridgeAnythingToObjectiveC(dict3)
  print("dictionary bridges to \(obj)")
}

// Check dictionary bridging.
var propListStr: NSString = "\"Hello\" = 1;\n\n\"World\" = 2;"
var dict4 = propListStr.propertyListFromStringsFileFormat()!
var hello: NSString = "Hello"
var world: NSString = "World"

// Print out the keys. We only check one of these because the order is
// nondeterministic.
// CHECK: Hello
for key in dict4.keys {
  print(key.description)
}

// CHECK: Hello: 1
print("Hello: \(dict4[hello]!)")
// CHECK: World: 2
print("World: \(dict4[world]!)")

// <rdar://problem/17035548> bridging array of blocks.
class Foo: NSObject {
    func foo() { print("Foo.foo()") }
    lazy var closures: [(@convention(block) () -> Void)] = [self.foo]
    func invoke() {
        closures[0]()
    }
}

// CHECK: Foo.foo()
Foo().invoke()

// <rdar://problem/19734621> Dealing with APIs that have been updated not to return nil in newer SDKs
// CHECK: getNullable: nil
print("getNullable: \(getNullable())")
// CHECK: getNonnull: []
print("getNonnull: \(getNonnull())")

// CHECK: final
print("final")

