I need a brief and clear explanation about why this is happening.
I used "Conditionally Conforming to a Protocol" which is introduced in swift documentation (link)
I want Array type to conform to my Test Protocol as long as elements in Array conforms to that protocol.
protocol Test {
    var result : String {get}
}
extension Int: Test {
    var result: String {
        return "int"
    }
}
extension Array: Test where Element: Test {
    var result: String {
        return "array"
    }
}
Then, I declared an instance of Array like this.
let array1 = Array<Test>()
print(array1 is Test) // **false**
I thought array1 was supposed to conform Test protocol (true) , but it was found not.
Then, I tried the following way of extension, and it worked.
extension Array: Test where Element == Test {
    var result: String {
        return "array"
    }
}
let array2 = Array<Test>()
print(array2 is Test) // **true**
I thought Array<Test>() meant "array that can take elements conforming to Test protocol", so that this array was supposed to conform to same protocol just like I declared in the first extension.
Question 
1. Difference between colon(:) and equal-to operator(==)
   - : means only conforming type / == means identical type?
2. Explanation how it works when I declare array instance like Array<Test>()
