File: functions.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (107 lines) | stat: -rw-r--r-- 4,009 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
// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -enable-experimental-cxx-interop)
//
// REQUIRES: executable_test

import StdlibUnittest
import Functions

var FunctionsTestSuite = TestSuite("Calling functions in base classes")

FunctionsTestSuite.test("Basic methods from derived") {
  let derived = Derived()
  expectEqual(String(cString: derived.constInBase()!), "Base::constInBase")
  expectEqual(String(cString: derived.takesArgsInBase(0, 1, 2)!), "Base::takesArgsInBase")

  var mutableDerived = derived
  expectEqual(String(cString: mutableDerived.mutatingInBase()!), "Base::mutatingInBase")
}

FunctionsTestSuite.test("NonTrivial methods from derived") {
  let derived = Derived()
  expectEqual(String(cString: derived.takesNonTrivialInBase(NonTrivial())!), "Base::takesNonTrivialInBase")
  _ = derived.returnsNonTrivialInBase()
}

// TODO: eventually support templates.
//FunctionsTestSuite.test("Template from derived") {
//  let derived = Derived()
// expectEqual(String(cString: derived.templateInBase(0)!), "Base::templateInBase")
//}

// TODO: eventually support static functions.
//FunctionsTestSuite.test("Static from derived") {
// expectEqual(String(cString: Derived.staticInBase()!), "Base::staticInBase")
//}

FunctionsTestSuite.test("Other base member from derived") {
  let derived = Derived()
  expectEqual(String(cString: derived.inOtherBase()!), "OtherBase::inOtherBase")
}

FunctionsTestSuite.test("Unambiguous members from derived") {
  let derived = Derived()
  expectEqual(derived.sameMethodNameSameSignature(), 21)
  expectEqual(derived.sameMethodDifferentSignature(1), 2)
  expectEqual(derived.sameMethodDifferentSignature(), 18)
}

FunctionsTestSuite.test("Basic methods from derived * 2") {
  let dd = DerivedFromDerived()
  expectEqual(String(cString: dd.constInBase()!), "Base::constInBase")
  expectEqual(String(cString: dd.takesArgsInBase(0, 1, 2)!), "Base::takesArgsInBase")

  var mutableDerived = dd
  expectEqual(String(cString: mutableDerived.mutatingInBase()!), "Base::mutatingInBase")
}

FunctionsTestSuite.test("NonTrivial methods from derived * 2") {
  let dd = DerivedFromDerived()
  expectEqual(String(cString: dd.takesNonTrivialInBase(NonTrivial())!), "Base::takesNonTrivialInBase")
  _ = dd.returnsNonTrivialInBase()
}

// TODO: eventually support static functions.
//FunctionsTestSuite.test("Static from derived * 2") {
// expectEqual(String(cString: DerivedFromDerived.staticInBase()!), "Base::staticInBase")
//}

FunctionsTestSuite.test("Other base member from derived * 2") {
  let dd = DerivedFromDerived()
  expectEqual(String(cString: dd.inOtherBase()!), "OtherBase::inOtherBase")
}

FunctionsTestSuite.test("base member from derived from non trivial") {
  let dnt = DerivedFromNonTrivial()
  expectEqual(String(cString: dnt.inNonTrivial()!), "NonTrivial::inNonTrivial")
  expectEqual(String(cString: dnt.inNonTrivialWithArgs(0, 1)!), "NonTrivial::inNonTrivialWithArgs")
}

FunctionsTestSuite.test("non-empty derived from empty class") {
  let derived = DerivedFromEmptyBaseClass()
  expectEqual(String(cString: derived.inBase()!), "EmptyBaseClass::inBase")
  expectEqual(derived.b, 42)
}

FunctionsTestSuite.test("base member calls do not require copying") {
  let derived = CopyTrackedDerivedClass(42)
  var copyCounter = getCopyCounter().pointee
  expectEqual(derived.getX(), 42)
  expectEqual(copyCounter, getCopyCounter().pointee)
  expectEqual(derived.getDerivedX(), 42)
  expectEqual(copyCounter, getCopyCounter().pointee)

  let derivedDerived = CopyTrackedDerivedDerivedClass(-5)
  copyCounter = getCopyCounter().pointee
  expectEqual(derivedDerived.getX(), -5)
  expectEqual(derivedDerived.getY(), 11)
  expectEqual(copyCounter, getCopyCounter().pointee)
}

FunctionsTestSuite.test("mutating base member calls do not require copying") {
  var derived = CopyTrackedDerivedClass(42)
  var copyCounter = getCopyCounter().pointee
  expectEqual(derived.getXMut(), 42)
  expectEqual(copyCounter, getCopyCounter().pointee)
}

runAllTests()