blob: af0d23148600198d0c93cee8da1fd2a147fdbf5d [file] [log] [blame]
// RUN: %target-typecheck-verify-swift
// Dictionary types.
class Base {
func f0(_ d: [String: Int]) { }
func f1(_ d: [String: [Int: Int]]) { }
}
class Derived : Base {
override func f0(_ d: Dictionary<String, Int>) { }
override func f1(_ d: Dictionary<String, Dictionary<Int, Int>>) { }
}
// Dictionary types in generic specializations.
struct X<T> { }
func testGenericSpec() {
_ = X<[Int : Int]>()
}
// Dictionary types for construction.
func constructDictionary(_ n: Int) {
var dict = [Int : String](minimumCapacity: n)
dict[5] = "hello"
}
// Parse errors
var y1: [String : Int = ["hello" : 1] // expected-error{{expected ']' in dictionary type}}
// expected-note @-1{{to match this opening '['}}
var y2: [String : ] // expected-error{{expected dictionary value type}}
struct NotHashable { }
var nh1 : [NotHashable : Int] // expected-error{{'NotHashable' does not conform to protocol 'Hashable'}}
struct Y<T> : Hashable {
func hash(into hasher: inout Hasher) {}
static func ==(this: Y<T>, other: Y<T>) -> Bool { return true }
}
let _ = [Y<Int>: Int]()
let _ = [Y<Int> : Int]()
let _ = [Y<Int> :Int]()