File: fields.swift

package info (click to toggle)
swiftlang 6.1.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,791,532 kB
  • sloc: cpp: 9,901,743; ansic: 2,201,431; asm: 1,091,827; python: 308,252; objc: 82,166; f90: 80,126; lisp: 38,358; pascal: 25,559; sh: 20,429; ml: 5,058; perl: 4,745; makefile: 4,484; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (134 lines) | stat: -rw-r--r-- 3,654 bytes parent folder | download
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
134
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -enable-experimental-cxx-interop)
//
// REQUIRES: executable_test

import StdlibUnittest
import Fields

var FieldsTestSuite = TestSuite("Getting and setting fields in base classes")

struct SwiftStructWrapper {
  let value: DerivedFromOneField
}

func optionalDerivedFromAll() -> DerivedFromAll? { DerivedFromAll() }

FieldsTestSuite.test("Fields from derived from all") {
  let derived = DerivedFromAll()
  expectEqual(derived.a, 1)
  expectEqual(derived.b, 2)
  expectEqual(derived.c, 3)
  expectEqual(derived.d, 4)
  expectEqual(derived.e, 5)
  expectEqual(derived.f, 6)

  var mutable = DerivedFromAll()
  mutable.a = 42
  mutable.d = 44
  mutable.e = 46
  mutable.f = 48

  expectEqual(mutable.a, 42)
  expectEqual(mutable.d, 44)
  expectEqual(mutable.e, 46)
  expectEqual(mutable.f, 48)
}

FieldsTestSuite.test("Optional") {
  let derived = optionalDerivedFromAll()
  expectEqual(derived!.a, 1)
  expectEqual(derived!.b, 2)
  expectEqual(derived!.c, 3)
  expectEqual(derived!.d, 4)
  expectEqual(derived!.e, 5)
  expectEqual(derived!.f, 6)
}

FieldsTestSuite.test("Struct holding derived from one field") {
  let derived = DerivedFromOneField()
  let s = SwiftStructWrapper(value: derived)

  expectEqual(s.value.value, 42)
}

FieldsTestSuite.test("Fields from derived from non trivial") {
  let derived = NonTrivialDerivedFromAll()
  expectEqual(derived.a, 1)
  expectEqual(derived.b, 2)
  expectEqual(derived.c, 3)
  expectEqual(derived.d, 4)
  expectEqual(derived.e, 5)
  expectEqual(derived.f, 6)

  var mutable = NonTrivialDerivedFromAll()
  mutable.a = 42
  mutable.d = 44
  mutable.e = 46
  mutable.f = 48

  expectEqual(mutable.a, 42)
  expectEqual(mutable.d, 44)
  expectEqual(mutable.e, 46)
  expectEqual(mutable.f, 48)
}

FieldsTestSuite.test("Derived from class template") {
  var derived = DerivedFromClassTemplate()
  derived.value = 42
  expectEqual(derived.value, 42)
}

FieldsTestSuite.test("Same field from derived") {
  var derived = DerivedWithSameField()
  derived.a = 42
  expectEqual(derived.a, 42)
}

extension CopyTrackedBaseClass {
    var swiftProp: CInt {
        return x
    }
}

FieldsTestSuite.test("Get field without copying base in the getter accessor") {
  let base = CopyTrackedBaseClass(0)
  var copyCounter = getCopyCounter().pointee
  expectEqual(base.swiftProp, 0)
  // Measure copy counter of a regular
  // property access for a C++ type to compare
  // it to see if any additional copies are
  // needed to access the property from the base class.
  let expectedCopyCountDiff = getCopyCounter().pointee - copyCounter

  let derived = CopyTrackedDerivedClass(234)
  copyCounter = getCopyCounter().pointee
  expectEqual(derived.x, 234)
  expectEqual(copyCounter, getCopyCounter().pointee - expectedCopyCountDiff)

  let derivedDerived = CopyTrackedDerivedDerivedClass(-11)
  copyCounter = getCopyCounter().pointee
  expectEqual(derivedDerived.x, -11)
  expectEqual(copyCounter, getCopyCounter().pointee - expectedCopyCountDiff)
}

FieldsTestSuite.test("Structs with virtual methods") {
  var derived = InheritFromStructsWithVirtualMethod()
  derived.d = 42
  expectEqual(derived.d, 42)
}

FieldsTestSuite.test("Field in tail padding of base class") {
  let usesBaseTailPadding = DerivedUsesBaseTailPadding()
  expectEqual(usesBaseTailPadding.field2, 789)
  expectEqual(usesBaseTailPadding.field4, 456)
  expectEqual(usesBaseTailPadding.field8, 123)
}

FieldsTestSuite.test("Out-of-order inheritance") {
  let d = DerivedOutOfOrder()
  expectEqual(d.leafField, 789)
  expectEqual(d.derivedField, 456)
  expectEqual(d.baseField, 123)
}

runAllTests()