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
|
// 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)
}
runAllTests()
|