-
Notifications
You must be signed in to change notification settings - Fork 10.4k
/
Copy pathMetadataPruning.swift
133 lines (107 loc) · 2.66 KB
/
MetadataPruning.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// RUN: %target-run-simple-swift
// RUN: %target-run-simple-swift(-Xfrontend -disable-reflection-metadata)
// RUN: %target-run-simple-swift(-Xfrontend -reflection-metadata-for-debugger-only)
// RUN: %target-run-simple-swift(-Xfrontend -disable-reflection-names)
//
// REQUIRES: executable_test
import StdlibUnittest
var tests = TestSuite("MetadataPruning")
struct TestStruct {
var int = 0
var double = 0.0
var bool = false
}
struct GenericStruct<T> {
var int = 0
var first: T
var second: T
}
enum TestEnum {
case one
case two
case three(TestStruct)
}
class BaseClass {
var superInt = 0
init() {}
}
class TestClass: BaseClass {
var int = 0
var double = 0.0
var bool = false
override init() {}
}
class TestSubclass: TestClass {
var strings: [String] = []
override init() {}
}
class GenericClass<T, U>: BaseClass {
var first: T
var second: U
init(_ t: T, _ u: U) {
self.first = t
self.second = u
}
}
class GenericSubclass<V, W>: GenericClass<V, Bool> {
var third: W
init(_ v: V, _ w: W) {
self.third = w
super.init(v, false)
}
}
class OwnershipTestClass: BaseClass {
weak var test1: TestClass?
unowned var test2: TestClass
unowned(unsafe) var test3: TestClass
init(_ t: TestClass) {
self.test1 = t
self.test2 = t
self.test3 = t
}
}
struct ContainsObject {
var obj: TestClass
}
#if _runtime(_ObjC)
import Foundation
class NSObjectSubclass: NSObject {
var point: (Double, Double)
init(x: Double, y: Double) {
self.point = (x, y)
}
}
class EmptyNSObject: NSObject {}
#endif
func printAddress(_ obj: AnyObject) {
print("\(obj) address: \(Unmanaged.passUnretained(obj).toOpaque())")
}
tests.test("Allocate types without metadata") {
let testStruct = TestStruct()
let genericStruct = GenericStruct<Double>(first: 1.3, second: 3.7)
let testEnum = TestEnum.three(testStruct)
let baseClass = BaseClass()
let testClass = TestClass()
let testSubclass = TestSubclass()
let genericClass = GenericClass<Int, String>(5, "bla")
let genericSubclass = GenericSubclass<Double, TestClass>(1.1, testClass)
let ownershipTestClass = OwnershipTestClass(testClass)
let containsObject = ContainsObject(obj: testClass)
print("\(testStruct)")
print("\(genericStruct)")
print("\(testEnum)")
printAddress(baseClass)
printAddress(testClass)
printAddress(testSubclass)
printAddress(genericClass)
printAddress(genericSubclass)
printAddress(ownershipTestClass)
print("\(containsObject)")
#if _runtime(_ObjC)
let nsObjectSubclass = NSObjectSubclass(x: 1.2, y: 3.4)
let emptyNSObject = EmptyNSObject()
printAddress(nsObjectSubclass)
printAddress(emptyNSObject)
#endif
}
runAllTests()