swift3.01での条件文+バインディング式の書き方の勉強中です。

TestSwitch関数は、「.Pass」 or 「.Fail(n) where n >100」のとき
switch文が実行されるようにしたいのですが、

if文では、条件にすべて合致しないので、すべてswitch文が実行されます。
guard文では、条件に合致するようで、switch文が実行されません。

条件式の、「or」「,」「where」など使い方が分かっていません。
教えてください。

func TestSwitch(_ e:Exam){

  1.
//if case let .Fail(a) = e, a < 100 , case .Pass = e{
// return
//}
  2.
//guard case let .Fail(a) = e, a > 100 , case .Pass = e else{
// return
//}

switch e {
    case .Pass(let n) where n < 300:
        print("Pass:300:\(n)")
    case let .Pass(n) where n < 5000:
        print("Pass:5000:\(n)")
    case .Fail:
        print(e)

    default:
        break
}

}

enum Exam {
case Pass(Int)
case Fail(Int)
}

let exam : [Exam] = [.Pass(100), .Fail(50), .Fail(500), .Pass(1000)]

for e in exam{

TestSwitch(e)    

}