mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
94 lines
2.6 KiB
Swift
94 lines
2.6 KiB
Swift
// 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 }
|
|
}
|