Skip to content

Commit 13b8c16

Browse files
committed
Merge pull request #2422 from lplarson/master
Reflection: Add tests for single-field classes of various types
2 parents 28757ab + dd3f916 commit 13b8c16

23 files changed

+1446
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Array
3+
// RUN: %target-run %target-swift-reflection-test %t/reflect_Array 2>&1 | FileCheck %s --check-prefix=CHECK-%target-ptrsize
4+
// REQUIRES: objc_interop
5+
6+
import SwiftReflectionTest
7+
8+
class TestClass {
9+
var t: Array<Int>
10+
init(t: Array<Int>) {
11+
self.t = t
12+
}
13+
}
14+
15+
var obj = TestClass(t: [1, 2, 3])
16+
17+
reflect(object: obj)
18+
19+
// CHECK-64: Reflecting an object.
20+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
21+
// CHECK-64: Type reference:
22+
// CHECK-64: (class reflect_Array.TestClass)
23+
24+
// CHECK-64: Type info:
25+
// CHECK-64: (class_instance size=24 alignment=16 stride=32 num_extra_inhabitants=0
26+
// CHECK-64: (field name=t offset=16
27+
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=1
28+
// CHECK-64: (field name=_buffer offset=0
29+
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=1
30+
// CHECK-64: (field name=_storage offset=0
31+
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=1
32+
// CHECK-64: (field name=rawValue offset=0
33+
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=1)))))))))
34+
35+
// CHECK-32: Reflecting an object.
36+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
37+
// CHECK-32: Type reference:
38+
// CHECK-32: (class reflect_Array.TestClass)
39+
40+
// CHECK-32: Type info:
41+
// CHECK-32: (class_instance size=16 alignment=16 stride=16 num_extra_inhabitants=0
42+
// CHECK-32: (field name=t offset=12
43+
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=1
44+
// CHECK-32: (field name=_buffer offset=0
45+
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=1
46+
// CHECK-32: (field name=_storage offset=0
47+
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=1
48+
// CHECK-32: (field name=rawValue offset=0
49+
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=1)))))))))
50+
51+
reflect(any: obj)
52+
53+
// CHECK-64: Reflecting an existential.
54+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
55+
// CHECK-64: Type reference:
56+
// CHECK-64: (class reflect_Array.TestClass)
57+
58+
// CHECK-64: Type info:
59+
// CHECK-64: (reference kind=strong refcounting=native)
60+
61+
// CHECK-32: Reflecting an existential.
62+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
63+
// CHECK-32: Type reference:
64+
// CHECK-32: (class reflect_Array.TestClass)
65+
66+
// CHECK-32: Type info:
67+
// CHECK-32: (reference kind=strong refcounting=native)
68+
69+
doneReflecting()
70+
71+
// CHECK-64: Done.
72+
73+
// CHECK-32: Done.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Bool
3+
// RUN: %target-run %target-swift-reflection-test %t/reflect_Bool 2>&1 | FileCheck %s --check-prefix=CHECK-%target-ptrsize
4+
// REQUIRES: objc_interop
5+
6+
import SwiftReflectionTest
7+
8+
class TestClass {
9+
var t: Bool
10+
init(t: Bool) {
11+
self.t = t
12+
}
13+
}
14+
15+
var obj = TestClass(t: true)
16+
17+
reflect(object: obj)
18+
19+
// CHECK-64: Reflecting an object.
20+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
21+
// CHECK-64: Type reference:
22+
// CHECK-64: (class reflect_Bool.TestClass)
23+
24+
// CHECK-64: Type info:
25+
// CHECK-64: (class_instance size=17 alignment=16 stride=32 num_extra_inhabitants=0
26+
// CHECK-64: (field name=t offset=16
27+
// CHECK-64: (struct size=1 alignment=1 stride=1 num_extra_inhabitants=254
28+
// CHECK-64: (field name=_value offset=0
29+
// CHECK-64: (builtin size=1 alignment=1 stride=1 num_extra_inhabitants=254)))))
30+
31+
// CHECK-32: Reflecting an object.
32+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
33+
// CHECK-32: Type reference:
34+
// CHECK-32: (class reflect_Bool.TestClass)
35+
36+
// CHECK-32: Type info:
37+
// CHECK-32: (class_instance size=13 alignment=16 stride=16 num_extra_inhabitants=0
38+
// CHECK-32: (field name=t offset=12
39+
// CHECK-32: (struct size=1 alignment=1 stride=1 num_extra_inhabitants=254
40+
// CHECK-32: (field name=_value offset=0
41+
// CHECK-32: (builtin size=1 alignment=1 stride=1 num_extra_inhabitants=254)))))
42+
43+
reflect(any: obj)
44+
45+
// CHECK-64: Reflecting an existential.
46+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
47+
// CHECK-64: Type reference:
48+
// CHECK-64: (class reflect_Bool.TestClass)
49+
50+
// CHECK-64: Type info:
51+
// CHECK-64: (reference kind=strong refcounting=native)
52+
53+
// CHECK-32: Reflecting an existential.
54+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
55+
// CHECK-32: Type reference:
56+
// CHECK-32: (class reflect_Bool.TestClass)
57+
58+
// CHECK-32: Type info:
59+
// CHECK-32: (reference kind=strong refcounting=native)
60+
61+
doneReflecting()
62+
63+
// CHECK-64: Done.
64+
65+
// CHECK-32: Done.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Character
3+
// RUN: %target-run %target-swift-reflection-test %t/reflect_Character 2>&1 | FileCheck %s --check-prefix=CHECK-%target-ptrsize
4+
// REQUIRES: objc_interop
5+
6+
import SwiftReflectionTest
7+
8+
class TestClass {
9+
var t: Character
10+
init(t: Character) {
11+
self.t = t
12+
}
13+
}
14+
15+
var obj = TestClass(t: "A")
16+
17+
reflect(object: obj)
18+
19+
// CHECK-64: Reflecting an object.
20+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
21+
// CHECK-64: Type reference:
22+
// CHECK-64: (class reflect_Character.TestClass)
23+
24+
// CHECK-64: Type info:
25+
// CHECK-64: <null type info>
26+
27+
// CHECK-32: Reflecting an object.
28+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
29+
// CHECK-32: Type reference:
30+
// CHECK-32: (class reflect_Character.TestClass)
31+
32+
// CHECK-32: Type info:
33+
// CHECK-32: <null type info>
34+
35+
reflect(any: obj)
36+
37+
// CHECK-64: Reflecting an existential.
38+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
39+
// CHECK-64: Type reference:
40+
// CHECK-64: (class reflect_Character.TestClass)
41+
42+
// CHECK-64: Type info:
43+
// CHECK-64: (reference kind=strong refcounting=native)
44+
45+
// CHECK-32: Reflecting an existential.
46+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
47+
// CHECK-32: Type reference:
48+
// CHECK-32: (class reflect_Character.TestClass)
49+
50+
// CHECK-32: Type info:
51+
// CHECK-32: (reference kind=strong refcounting=native)
52+
53+
doneReflecting()
54+
55+
// CHECK-64: Done.
56+
57+
// CHECK-32: Done.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Dictionary
3+
// RUN: %target-run %target-swift-reflection-test %t/reflect_Dictionary 2>&1 | FileCheck %s --check-prefix=CHECK-%target-ptrsize
4+
// REQUIRES: objc_interop
5+
6+
import SwiftReflectionTest
7+
8+
class TestClass {
9+
var t: Dictionary<Int, Int>
10+
init(t: Dictionary<Int, Int>) {
11+
self.t = t
12+
}
13+
}
14+
15+
var obj = TestClass(t: [1: 3, 2: 2, 3: 1])
16+
17+
reflect(object: obj)
18+
19+
// CHECK-64: Reflecting an object.
20+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
21+
// CHECK-64: Type reference:
22+
// CHECK-64: (class reflect_Dictionary.TestClass)
23+
24+
// CHECK-64: Type info:
25+
// CHECK-64: <null type info>
26+
27+
// CHECK-32: Reflecting an object.
28+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
29+
// CHECK-32: Type reference:
30+
// CHECK-32: (class reflect_Dictionary.TestClass)
31+
32+
// CHECK-32: Type info:
33+
// CHECK-32: <null type info>
34+
35+
reflect(any: obj)
36+
37+
// CHECK-64: Reflecting an existential.
38+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
39+
// CHECK-64: Type reference:
40+
// CHECK-64: (class reflect_Dictionary.TestClass)
41+
42+
// CHECK-64: Type info:
43+
// CHECK-64: (reference kind=strong refcounting=native)
44+
45+
// CHECK-32: Reflecting an existential.
46+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
47+
// CHECK-32: Type reference:
48+
// CHECK-32: (class reflect_Dictionary.TestClass)
49+
50+
// CHECK-32: Type info:
51+
// CHECK-32: (reference kind=strong refcounting=native)
52+
53+
doneReflecting()
54+
55+
// CHECK-64: Done.
56+
57+
// CHECK-32: Done.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Double
3+
// RUN: %target-run %target-swift-reflection-test %t/reflect_Double 2>&1 | FileCheck %s --check-prefix=CHECK-%target-ptrsize
4+
// REQUIRES: objc_interop
5+
6+
import SwiftReflectionTest
7+
8+
class TestClass {
9+
var t: Double
10+
init(t: Double) {
11+
self.t = t
12+
}
13+
}
14+
15+
var obj = TestClass(t: 123.45)
16+
17+
reflect(object: obj)
18+
19+
// CHECK-64: Reflecting an object.
20+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
21+
// CHECK-64: Type reference:
22+
// CHECK-64: (class reflect_Double.TestClass)
23+
24+
// CHECK-64: Type info:
25+
// CHECK-64: (class_instance size=24 alignment=16 stride=32 num_extra_inhabitants=0
26+
// CHECK-64: (field name=t offset=16
27+
// CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
28+
// CHECK-64: (field name=_value offset=0
29+
// CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0)))))
30+
31+
// CHECK-32: Reflecting an object.
32+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
33+
// CHECK-32: Type reference:
34+
// CHECK-32: (class reflect_Double.TestClass)
35+
36+
// CHECK-32: Type info:
37+
// CHECK-32: (class_instance size=24 alignment=16 stride=32 num_extra_inhabitants=0
38+
// CHECK-32: (field name=t offset=16
39+
// CHECK-32: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=0
40+
// CHECK-32: (field name=_value offset=0
41+
// CHECK-32: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=0)))))
42+
43+
reflect(any: obj)
44+
45+
// CHECK-64: Reflecting an existential.
46+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
47+
// CHECK-64: Type reference:
48+
// CHECK-64: (class reflect_Double.TestClass)
49+
50+
// CHECK-64: Type info:
51+
// CHECK-64: (reference kind=strong refcounting=native)
52+
53+
// CHECK-32: Reflecting an existential.
54+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
55+
// CHECK-32: Type reference:
56+
// CHECK-32: (class reflect_Double.TestClass)
57+
58+
// CHECK-32: Type info:
59+
// CHECK-32: (reference kind=strong refcounting=native)
60+
61+
doneReflecting()
62+
63+
// CHECK-64: Done.
64+
65+
// CHECK-32: Done.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: %target-build-swift -lswiftSwiftReflectionTest %s -o %t/reflect_Float
3+
// RUN: %target-run %target-swift-reflection-test %t/reflect_Float 2>&1 | FileCheck %s --check-prefix=CHECK-%target-ptrsize
4+
// REQUIRES: objc_interop
5+
6+
import SwiftReflectionTest
7+
8+
class TestClass {
9+
var t: Float
10+
init(t: Float) {
11+
self.t = t
12+
}
13+
}
14+
15+
var obj = TestClass(t: 123.45)
16+
17+
reflect(object: obj)
18+
19+
// CHECK-64: Reflecting an object.
20+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
21+
// CHECK-64: Type reference:
22+
// CHECK-64: (class reflect_Float.TestClass)
23+
24+
// CHECK-64: Type info:
25+
// CHECK-64: (class_instance size=20 alignment=16 stride=32 num_extra_inhabitants=0
26+
// CHECK-64: (field name=t offset=16
27+
// CHECK-64: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
28+
// CHECK-64: (field name=_value offset=0
29+
// CHECK-64: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0)))))
30+
31+
// CHECK-32: Reflecting an object.
32+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
33+
// CHECK-32: Type reference:
34+
// CHECK-32: (class reflect_Float.TestClass)
35+
36+
// CHECK-32: Type info:
37+
// CHECK-32: (class_instance size=16 alignment=16 stride=16 num_extra_inhabitants=0
38+
// CHECK-32: (field name=t offset=12
39+
// CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=0
40+
// CHECK-32: (field name=_value offset=0
41+
// CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=0)))))
42+
43+
reflect(any: obj)
44+
45+
// CHECK-64: Reflecting an existential.
46+
// CHECK-64: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
47+
// CHECK-64: Type reference:
48+
// CHECK-64: (class reflect_Float.TestClass)
49+
50+
// CHECK-64: Type info:
51+
// CHECK-64: (reference kind=strong refcounting=native)
52+
53+
// CHECK-32: Reflecting an existential.
54+
// CHECK-32: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
55+
// CHECK-32: Type reference:
56+
// CHECK-32: (class reflect_Float.TestClass)
57+
58+
// CHECK-32: Type info:
59+
// CHECK-32: (reference kind=strong refcounting=native)
60+
61+
doneReflecting()
62+
63+
// CHECK-64: Done.
64+
65+
// CHECK-32: Done.

0 commit comments

Comments
 (0)