-
Notifications
You must be signed in to change notification settings - Fork 10.5k
/
Copy pathcf.swift
92 lines (73 loc) · 2.74 KB
/
cf.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// RUN: %swift -parse -verify -import-cf-types -I %S/Inputs/custom-modules -target x86_64-apple-macosx10.9 %s
import CoreCooling
func assertUnmanaged<T: AnyObject>(t: Unmanaged<T>) {}
func assertManaged<T: AnyObject>(t: T) {}
func test0(fridge: CCRefrigeratorRef) {
assertManaged(fridge)
}
func test1(power: Unmanaged<CCPowerSupplyRef>) {
assertUnmanaged(power)
let fridge = CCRefrigeratorCreate(power) // expected-error {{cannot invoke 'CCRefrigeratorCreate' with an argument list of type '(Unmanaged<CCPowerSupplyRef>)'}} expected-note{{expected an argument list of type '(CCPowerSupply!)'}}
assertUnmanaged(fridge)
}
func test2() {
let fridge = CCRefrigeratorCreate(kCCPowerStandard)
assertUnmanaged(fridge)
}
func test3(fridge: CCRefrigerator) {
assertManaged(fridge)
}
func test4() {
// FIXME: this should not require a type annotation
let power: CCPowerSupply = kCCPowerStandard
assertManaged(power)
let fridge = CCRefrigeratorCreate(power)
assertUnmanaged(fridge)
}
func test5() {
let power: Unmanaged<CCPowerSupply> = .passUnretained(kCCPowerStandard)
assertUnmanaged(power)
let fridge = CCRefrigeratorCreate(power.takeUnretainedValue())
}
func test6() {
let fridge = CCRefrigeratorCreate(nil)
fridge?.release()
}
func test7() {
let value = CFBottom()
assertUnmanaged(value)
}
func test8(f: CCRefrigerator) {
let v1: CFTypeRef = f
let v2: AnyObject = f
}
func test9() {
let fridge = CCRefrigeratorCreateMutable(kCCPowerStandard).takeRetainedValue()
let constFridge: CCRefrigerator = fridge
CCRefrigeratorOpen(fridge)
let item = CCRefrigeratorGet(fridge, 0).takeUnretainedValue()
CCRefrigeratorInsert(item, fridge) // expected-error {{cannot invoke 'CCRefrigeratorInsert' with an argument list of type '(CCItem, CCMutableRefrigerator)'}} expected-note {{expected an argument list of type '(CCMutableRefrigerator!, CCItem!)'}}
CCRefrigeratorInsert(constFridge, item) // expected-error {{cannot invoke 'CCRefrigeratorInsert' with an argument list of type '(CCRefrigerator, CCItem)'}} expected-note {{expected an argument list of type '(CCMutableRefrigerator!, CCItem!)'}}
CCRefrigeratorInsert(fridge, item)
CCRefrigeratorClose(fridge)
}
func testProperty(k: Kitchen) {
k.fridge = CCRefrigeratorCreate(kCCPowerStandard).takeRetainedValue()
CCRefrigeratorOpen(k.fridge)
CCRefrigeratorClose(k.fridge)
}
func testTollFree0(mduct: MutableDuct) {
let ccmduct: CCMutableDuct = mduct
let duct: Duct = mduct
let ccduct: CCDuct = duct
}
func testTollFree1(ccmduct: CCMutableDuct) {
let mduct: MutableDuct = ccmduct
let ccduct: CCDuct = ccmduct
let duct: Duct = ccduct
}
func testChainedAliases(fridge: CCRefrigerator) {
let _: CCRefrigeratorRef = fridge
let _: CCFridge = fridge
let _: CCFridgeRef = fridge
}