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
|
// RUN: %target-typecheck-verify-swift -swift-version 6
func forwardMatch1(
a: Int = 0, b: Int = 17, closure1: (Int) -> Int = { $0 }, c: Int = 42,
numbers: Int..., closure2: ((Double) -> Double)? = nil,
closure3: (String) -> String = { $0 + "!" }
) {
}
func testForwardMatch1(i: Int, d: Double, s: String) {
forwardMatch1()
// Matching closure1
forwardMatch1 { _ in i }
forwardMatch1 { _ in i } closure2: { d + $0 }
forwardMatch1 { _ in i } closure2: { d + $0 } closure3: { $0 + ", " + s + "!" }
forwardMatch1 { _ in i } closure3: { $0 + ", " + s + "!" }
forwardMatch1(a: 5) { $0 + i }
forwardMatch1(a: 5) { $0 + i } closure2: { d + $0 }
forwardMatch1(a: 5) { $0 + i } closure2: { d + $0 } closure3: { $0 + ", " + s + "!" }
forwardMatch1(a: 5) { $0 + i } closure3: { $0 + ", " + s + "!" }
forwardMatch1(b: 1) { $0 + i }
forwardMatch1(b: 1) { $0 + i } closure2: { d + $0 }
forwardMatch1(b: 1) { $0 + i } closure2: { d + $0 } closure3: { $0 + ", " + s + "!" }
forwardMatch1(b: 1) { $0 + i } closure3: { $0 + ", " + s + "!" }
// Matching closure2
forwardMatch1(closure1: { $0 + i }) { d + $0 }
forwardMatch1(closure1: { $0 + i }, numbers: 1, 2, 3) { d + $0 }
forwardMatch1(closure1: { $0 + i }, numbers: 1, 2, 3) { d + $0 } closure3: { $0 + ", " + s + "!" }
// Matching closure3
forwardMatch1(closure2: nil) { $0 + ", " + s + "!" }
}
func forwardMatchWithAutoclosure1(
a: String = "hello",
b: @autoclosure () -> Int = 17,
closure1: () -> String
) { }
func testForwardMatchWithAutoclosure1(i: Int, s: String) {
forwardMatchWithAutoclosure1 {
print(s)
return s
}
forwardMatchWithAutoclosure1(a: s) {
print(s)
return s
}
forwardMatchWithAutoclosure1(b: i) {
print(s)
return s
}
forwardMatchWithAutoclosure1(a: s, b: i) {
print(s)
return s
}
}
func forwardMatchWithAutoclosure2(
a: String = "hello",
closure1: @autoclosure () -> (() -> String),
closure2: () -> Int = { 5 }
) { }
func testForwardMatchWithAutoclosure2(i: Int, s: String) {
forwardMatchWithAutoclosure2 {
print(s)
return s
}
forwardMatchWithAutoclosure2(a: s) {
print(s)
return s
}
forwardMatchWithAutoclosure2(a: s, closure1: { s }) {
print(i)
return i
}
}
// Match a closure parameter to a variadic parameter.
func acceptsVariadicClosureParameter(closures: ((Int, Int) -> Int)...) {
}
func testVariadicClosureParameter() {
acceptsVariadicClosureParameter { x, y in x % y }
acceptsVariadicClosureParameter() { x, y in x % y }
acceptsVariadicClosureParameter(closures: +, -, *, /) { x, y in x % y }
}
|