mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The runtime diagnostics here are awful, but the monkey dances <rdar://problem/16899681>. Swift SVN r18121
169 lines
4.5 KiB
Swift
169 lines
4.5 KiB
Swift
// RUN: %target-run-simple-swift | FileCheck %s
|
|
|
|
import Foundation
|
|
|
|
var activeXObjects: Int = 0
|
|
|
|
class X {
|
|
var value: Int
|
|
|
|
init(value: Int) {
|
|
self.value = value
|
|
|
|
++activeXObjects
|
|
}
|
|
|
|
deinit {
|
|
--activeXObjects
|
|
}
|
|
}
|
|
|
|
func getIUO<T>(x: T?) -> T! { return x }
|
|
|
|
// Bridge an array of an implicitly unwrapped class type.
|
|
func testConvertArrayOfImplicitUnwrappedClass() {
|
|
println("Converting array of IOU of class type to NSArray...")
|
|
let classArr1 = [ getIUO(X(value: 1)), getIUO(X(value: 2)) ]
|
|
let classNSArr1: NSArray = classArr1
|
|
// CHECK: Class array count = 2
|
|
println("Class array count = \(classNSArr1.count)")
|
|
|
|
// CHECK: Element 0 has value 1
|
|
// CHECK: Element 1 has value 2
|
|
for (index, obj) in enumerate(classNSArr1) {
|
|
if let x = obj as X {
|
|
println("Element \(index) has value \(x.value)")
|
|
} else {
|
|
println("Element \(index) is not an X")
|
|
}
|
|
}
|
|
}
|
|
|
|
testConvertArrayOfImplicitUnwrappedClass()
|
|
|
|
// CHECK: Active X objects = 0
|
|
println("Active X objects = \(activeXObjects)")
|
|
|
|
// Bridge an array of an implicitly unwrapped bridged value type.
|
|
func testConvertArrayOfImplicitUnwrappedValue() {
|
|
println("Converting array of IOU of String to NSArray...")
|
|
// FIXME: Array literal of these explodes
|
|
var stringArr1: (String!)[] = []
|
|
stringArr1.append(getIUO("Hello"))
|
|
stringArr1.append(getIUO("World"))
|
|
|
|
let stringNSArr1: NSArray = stringArr1
|
|
|
|
// CHECK: String array count = 2
|
|
println("String array count = \(stringNSArr1.count)")
|
|
|
|
// CHECK: Element 0 has value Hello
|
|
// CHECK: Element 1 has value World
|
|
for (index, obj) in enumerate(stringNSArr1) {
|
|
if let str = obj as String {
|
|
println("Element \(index) has value \(str)")
|
|
} else {
|
|
println("Element \(index) is not a String")
|
|
}
|
|
}
|
|
|
|
// FIXME: "stringNSArray1[0] as String" also fails
|
|
}
|
|
|
|
testConvertArrayOfImplicitUnwrappedValue()
|
|
|
|
// Bridge an array of an implicitly unwrapped array value type.
|
|
func testConvertArrayOfImplicitUnwrappedArray() {
|
|
println("Converting array of IOU of Arrays of String to NSArray...")
|
|
// FIXME: Array literal of these explodes
|
|
var stringArr1: (String!)[] = []
|
|
stringArr1.append(getIUO("Hello"))
|
|
stringArr1.append(getIUO("World"))
|
|
|
|
var stringArr2: (String!)[] = []
|
|
stringArr2.append(getIUO("Welcome"))
|
|
stringArr2.append(getIUO("Swift"))
|
|
|
|
var stringArrArr: (((String!)[])!)[] = []
|
|
stringArrArr.append(getIUO(stringArr1))
|
|
stringArrArr.append(getIUO(stringArr2))
|
|
|
|
let nsarr: NSArray = stringArrArr
|
|
|
|
// CHECK: String array array count = 2
|
|
println("String array array count = \(nsarr.count)")
|
|
|
|
// CHECK: Element 0 has value (
|
|
// CHECK: Hello,
|
|
// CHECK: World
|
|
// CHECK: )
|
|
// CHECK: Element 1 has value (
|
|
// CHECK: Welcome,
|
|
// CHECK: Swift
|
|
// CHECK: )
|
|
for (index, obj) in enumerate(nsarr) {
|
|
if let innerNSArr = obj as NSArray {
|
|
println("Element \(index) has value \(innerNSArr.description!)")
|
|
} else {
|
|
println("Element \(index) is not an NSArray")
|
|
}
|
|
|
|
// FIXME: Downcast to (String!)[]
|
|
}
|
|
}
|
|
|
|
testConvertArrayOfImplicitUnwrappedArray()
|
|
|
|
// Bridge an NSArray to an array of implicitly unwrapped class type.
|
|
func testConvertToArrayOfImplicitUnwrappedClass() {
|
|
println("Converting an NSArray to an array of X!")
|
|
var nsarr = NSMutableArray()
|
|
nsarr.addObject(X(value: 1))
|
|
nsarr.addObject(X(value: 2))
|
|
|
|
var arr: (X!)[] = _convertNSArrayToArray(nsarr)
|
|
|
|
// CHECK: Class array count = 2
|
|
// CHECK: Element 0 has value X(1)
|
|
// CHECK: Element 1 has value X(2)
|
|
println("Class array count = \(arr.count)")
|
|
for (index, opt) in enumerate(arr) {
|
|
if let x = opt {
|
|
println("Element \(index) has value X(\(x.value))")
|
|
} else {
|
|
println("Element \(index) is empty")
|
|
}
|
|
}
|
|
}
|
|
|
|
testConvertToArrayOfImplicitUnwrappedClass()
|
|
|
|
// Bridge an NSArray to an array of implicitly unwrapped string type.
|
|
func testConvertToArrayOfImplicitUnwrappedString() {
|
|
println("Converting an NSArray to an array of String!")
|
|
var nsarr = NSMutableArray()
|
|
nsarr.addObject(NSString(string: "Hello"))
|
|
nsarr.addObject(NSString(string: "World"))
|
|
|
|
var arr: (String!)[] = _convertNSArrayToArray(nsarr)
|
|
|
|
// CHECK: String array count = 2
|
|
// CHECK: Element 0 has value Hello
|
|
// CHECK: Element 1 has value World
|
|
println("String array count = \(arr.count)")
|
|
for (index, opt) in enumerate(arr) {
|
|
if let str = opt {
|
|
println("Element \(index) has value \(str)")
|
|
} else {
|
|
println("Element \(index) is empty")
|
|
}
|
|
}
|
|
}
|
|
|
|
testConvertToArrayOfImplicitUnwrappedString()
|
|
|
|
// FIXME: Negative tests will need their own path.
|
|
|
|
// CHECK: DONE
|
|
println("DONE")
|