90 lines
3.6 KiB
Swift
90 lines
3.6 KiB
Swift
import XCTest
|
|
@testable import GRDB
|
|
|
|
class OrderedDictionaryTests: GRDBTestCase {
|
|
func testSubscriptWithDefaultValue() throws {
|
|
var dict: OrderedDictionary<String, [String]> = [:]
|
|
dict["a", default: []].append("foo")
|
|
dict["a", default: []].append("bar")
|
|
XCTAssertEqual(dict, ["a": ["foo", "bar"]])
|
|
}
|
|
|
|
func testMergingUniquingKeysWith() {
|
|
do {
|
|
let dict: OrderedDictionary = ["a": 1, "b": 2]
|
|
|
|
let otherDictionary = ["a": 3, "c": 4]
|
|
let otherOrderedDictionary: OrderedDictionary = ["a": 3, "c": 4]
|
|
let otherSequence = zip(["a", "c"], [3, 4])
|
|
|
|
do {
|
|
let result = dict.merging(otherDictionary, uniquingKeysWith: { (current, _) in current })
|
|
XCTAssertEqual(result, ["a": 1, "b": 2, "c": 4])
|
|
}
|
|
do {
|
|
let result = dict.merging(otherOrderedDictionary, uniquingKeysWith: { (current, _) in current })
|
|
XCTAssertEqual(result, ["a": 1, "b": 2, "c": 4])
|
|
}
|
|
do {
|
|
let result = dict.merging(otherSequence, uniquingKeysWith: { (current, _) in current })
|
|
XCTAssertEqual(result, ["a": 1, "b": 2, "c": 4])
|
|
}
|
|
|
|
do {
|
|
let result = dict.merging(otherDictionary, uniquingKeysWith: { (_, new) in new })
|
|
XCTAssertEqual(result, ["a": 3, "b": 2, "c": 4])
|
|
}
|
|
do {
|
|
let result = dict.merging(otherOrderedDictionary, uniquingKeysWith: { (_, new) in new })
|
|
XCTAssertEqual(result, ["a": 3, "b": 2, "c": 4])
|
|
}
|
|
do {
|
|
let result = dict.merging(otherSequence, uniquingKeysWith: { (_, new) in new })
|
|
XCTAssertEqual(result, ["a": 3, "b": 2, "c": 4])
|
|
}
|
|
|
|
do {
|
|
let result = dict.merging(otherDictionary, uniquingKeysWith: { $0 + $1 })
|
|
XCTAssertEqual(result, ["a": 4, "b": 2, "c": 4])
|
|
}
|
|
do {
|
|
let result = dict.merging(otherOrderedDictionary, uniquingKeysWith: { $0 + $1 })
|
|
XCTAssertEqual(result, ["a": 4, "b": 2, "c": 4])
|
|
}
|
|
do {
|
|
let result = dict.merging(otherSequence, uniquingKeysWith: { $0 + $1 })
|
|
XCTAssertEqual(result, ["a": 4, "b": 2, "c": 4])
|
|
}
|
|
}
|
|
}
|
|
|
|
func testDescription() {
|
|
do {
|
|
// One key/value pair
|
|
let dict: OrderedDictionary = ["toto": "foo"]
|
|
XCTAssertEqual(dict.description, #"["toto": "foo"]"#)
|
|
}
|
|
do {
|
|
// Two key/value pairs
|
|
let dict: OrderedDictionary = ["toto": "foo", "titi": "bar"]
|
|
XCTAssertEqual(dict.description, #"["toto": "foo", "titi": "bar"]"#)
|
|
}
|
|
}
|
|
|
|
func testOrderedDictionaryDescriptionEqualsDictionaryDescription() {
|
|
struct Key: Hashable, CustomStringConvertible, CustomDebugStringConvertible {
|
|
var description: String { "Key description" }
|
|
var debugDescription: String { "Key debugDescription" }
|
|
}
|
|
struct Value: CustomStringConvertible, CustomDebugStringConvertible {
|
|
var description: String { "Value description" }
|
|
var debugDescription: String { "Value debugDescription" }
|
|
}
|
|
do {
|
|
let dict = [Key(): Value()]
|
|
let orderedDict: OrderedDictionary = [Key(): Value()]
|
|
XCTAssertEqual(String(describing: orderedDict), String(describing: dict))
|
|
}
|
|
}
|
|
}
|