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