mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
44 lines
950 B
Swift
44 lines
950 B
Swift
// RUN: %target-run-simple-swift | %FileCheck %s
|
|
// REQUIRES: executable_test
|
|
|
|
protocol RollCallable {
|
|
func rollCall() -> String
|
|
}
|
|
|
|
protocol Snarker {
|
|
func snark() -> String
|
|
}
|
|
|
|
struct Cambot : RollCallable {
|
|
func rollCall() -> String { return "Cambot!" }
|
|
}
|
|
struct Gypsy : RollCallable {
|
|
func rollCall() -> String { return "Gypsy!" }
|
|
}
|
|
struct TomServo : RollCallable {
|
|
func rollCall() -> String { return "Tom Servo!" }
|
|
}
|
|
struct Crow : RollCallable, Snarker {
|
|
func rollCall() -> String { return "Croooow!" }
|
|
func snark() -> String { return "That's one O!" }
|
|
}
|
|
|
|
func printRollCall(_ x: RollCallable) {
|
|
print(x.rollCall())
|
|
}
|
|
|
|
func printRollCallWithSnark(_ x: RollCallable & Snarker) {
|
|
printRollCall(x)
|
|
print("(\(x.snark()))")
|
|
}
|
|
|
|
// CHECK: Cambot!
|
|
printRollCall(Cambot())
|
|
// CHECK: Gypsy!
|
|
printRollCall(Gypsy())
|
|
// CHECK: Tom Servo!
|
|
printRollCall(TomServo())
|
|
// CHECK: Croooow!
|
|
// CHECK: (That's one O!)
|
|
printRollCallWithSnark(Crow())
|