blob: 8f47b5aa4160773b65bead52ce98b1b93d97c3c1 [file] [log] [blame]
// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test
protocol MyBoolean {
var boolValue: Bool { get }
}
func andc<T : MyBoolean>(_ x: Bool, _ y: T) -> Bool {
return x && !y.boolValue
}
struct Truthy : MyBoolean {
var boolValue: Bool {
return true
}
}
struct Falselike : MyBoolean {
var boolValue: Bool {
return false
}
}
print(andc(true, Truthy())) // CHECK: false
print(andc(false, Truthy())) // CHECK: false
print(andc(true, Falselike())) // CHECK: true
print(andc(false, Falselike())) // CHECK: false
func must<T : MyBoolean>(_ x: T) {
assert(x.boolValue)
}
func shant<T : MyBoolean>(_ x: T) {
assert(!x.boolValue)
}
must(Truthy())
shant(Falselike())
print("ok") // CHECK: ok