blob: 7a0bc1e707083d8d4774f56a0d5be35fdcacb5be [file] [log] [blame]
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
#if DEPLOYMENT_RUNTIME_OBJC || os(Linux)
import Foundation
import XCTest
#else
import SwiftFoundation
import SwiftXCTest
#endif
class TestIndexPath: XCTestCase {
static var allTests: [(String, (TestIndexPath) -> () throws -> Void)] {
return [
("testEmpty", testEmpty),
("testSingleIndex", testSingleIndex),
("testTwoIndexes", testTwoIndexes),
("testManyIndexes", testManyIndexes),
("testCreateFromSequence", testCreateFromSequence),
("testCreateFromLiteral", testCreateFromLiteral),
("testDropLast", testDropLast),
("testDropLastFromEmpty", testDropLastFromEmpty),
("testDropLastFromSingle", testDropLastFromSingle),
("testDropLastFromPair", testDropLastFromPair),
("testDropLastFromTriple", testDropLastFromTriple),
("testStartEndIndex", testStartEndIndex),
("testIterator", testIterator),
("testIndexing", testIndexing),
("testCompare", testCompare),
("testHashing", testHashing),
("testEquality", testEquality),
("testSubscripting", testSubscripting),
("testAppending", testAppending),
("testAppendEmpty", testAppendEmpty),
("testAppendEmptyIndexPath", testAppendEmptyIndexPath),
("testAppendManyIndexPath", testAppendManyIndexPath),
("testAppendEmptyIndexPathToSingle", testAppendEmptyIndexPathToSingle),
("testAppendSingleIndexPath", testAppendSingleIndexPath),
("testAppendSingleIndexPathToSingle", testAppendSingleIndexPathToSingle),
("testAppendPairIndexPath", testAppendPairIndexPath),
("testAppendManyIndexPathToEmpty", testAppendManyIndexPathToEmpty),
("testAppendByOperator", testAppendByOperator),
("testAppendArray", testAppendArray),
("testRanges", testRanges),
("testRangeFromEmpty", testRangeFromEmpty),
("testRangeFromSingle", testRangeFromSingle),
("testRangeFromPair", testRangeFromPair),
("testRangeFromMany", testRangeFromMany),
("testRangeReplacementSingle", testRangeReplacementSingle),
("testRangeReplacementPair", testRangeReplacementPair),
("testMoreRanges", testMoreRanges),
("testIteration", testIteration),
("testDescription", testDescription),
("testBridgeToObjC", testBridgeToObjC),
("testForceBridgeFromObjC", testForceBridgeFromObjC),
("testConditionalBridgeFromObjC", testConditionalBridgeFromObjC),
("testUnconditionalBridgeFromObjC", testUnconditionalBridgeFromObjC),
("testObjcBridgeType", testObjcBridgeType),
("test_AnyHashableContainingIndexPath", test_AnyHashableContainingIndexPath),
("test_AnyHashableCreatedFromNSIndexPath", test_AnyHashableCreatedFromNSIndexPath),
("test_unconditionallyBridgeFromObjectiveC", test_unconditionallyBridgeFromObjectiveC),
("test_slice_1ary", test_slice_1ary),
]
}
func testEmpty() {
let ip = IndexPath()
XCTAssertEqual(ip.count, 0)
}
func testSingleIndex() {
let ip = IndexPath(index: 1)
XCTAssertEqual(ip.count, 1)
XCTAssertEqual(ip[0], 1)
let highValueIp = IndexPath(index: .max)
XCTAssertEqual(highValueIp.count, 1)
XCTAssertEqual(highValueIp[0], .max)
let lowValueIp = IndexPath(index: .min)
XCTAssertEqual(lowValueIp.count, 1)
XCTAssertEqual(lowValueIp[0], .min)
}
func testTwoIndexes() {
let ip = IndexPath(indexes: [0, 1])
XCTAssertEqual(ip.count, 2)
XCTAssertEqual(ip[0], 0)
XCTAssertEqual(ip[1], 1)
}
func testManyIndexes() {
let ip = IndexPath(indexes: [0, 1, 2, 3, 4])
XCTAssertEqual(ip.count, 5)
XCTAssertEqual(ip[0], 0)
XCTAssertEqual(ip[1], 1)
XCTAssertEqual(ip[2], 2)
XCTAssertEqual(ip[3], 3)
XCTAssertEqual(ip[4], 4)
}
func testCreateFromSequence() {
let seq = repeatElement(5, count: 3)
let ip = IndexPath(indexes: seq)
XCTAssertEqual(ip.count, 3)
XCTAssertEqual(ip[0], 5)
XCTAssertEqual(ip[1], 5)
XCTAssertEqual(ip[2], 5)
}
func testCreateFromLiteral() {
let ip: IndexPath = [1, 2, 3, 4]
XCTAssertEqual(ip.count, 4)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 2)
XCTAssertEqual(ip[2], 3)
XCTAssertEqual(ip[3], 4)
}
func testDropLast() {
let ip: IndexPath = [1, 2, 3, 4]
let ip2 = ip.dropLast()
XCTAssertEqual(ip2.count, 3)
XCTAssertEqual(ip2[0], 1)
XCTAssertEqual(ip2[1], 2)
XCTAssertEqual(ip2[2], 3)
}
func testDropLastFromEmpty() {
let ip: IndexPath = []
let ip2 = ip.dropLast()
XCTAssertEqual(ip2.count, 0)
}
func testDropLastFromSingle() {
let ip: IndexPath = [1]
let ip2 = ip.dropLast()
XCTAssertEqual(ip2.count, 0)
}
func testDropLastFromPair() {
let ip: IndexPath = [1, 2]
let ip2 = ip.dropLast()
XCTAssertEqual(ip2.count, 1)
XCTAssertEqual(ip2[0], 1)
}
func testDropLastFromTriple() {
let ip: IndexPath = [1, 2, 3]
let ip2 = ip.dropLast()
XCTAssertEqual(ip2.count, 2)
XCTAssertEqual(ip2[0], 1)
XCTAssertEqual(ip2[1], 2)
}
func testStartEndIndex() {
let ip: IndexPath = [1, 2, 3, 4]
XCTAssertEqual(ip.startIndex, 0)
XCTAssertEqual(ip.endIndex, ip.count)
}
func testIterator() {
let ip: IndexPath = [1, 2, 3, 4]
var iter = ip.makeIterator()
var sum = 0
while let index = iter.next() {
sum += index
}
XCTAssertEqual(sum, 1 + 2 + 3 + 4)
}
func testIndexing() {
let ip: IndexPath = [1, 2, 3, 4]
XCTAssertEqual(ip.index(before: 1), 0)
XCTAssertEqual(ip.index(before: 0), -1) // beyond range!
XCTAssertEqual(ip.index(after: 1), 2)
XCTAssertEqual(ip.index(after: 4), 5) // beyond range!
}
func testCompare() {
let ip1: IndexPath = [1, 2]
let ip2: IndexPath = [3, 4]
let ip3: IndexPath = [5, 1]
let ip4: IndexPath = [1, 1, 1]
let ip5: IndexPath = [1, 1, 9]
XCTAssertEqual(ip1.compare(ip1), ComparisonResult.orderedSame)
XCTAssertEqual(ip1 < ip1, false)
XCTAssertEqual(ip1 <= ip1, true)
XCTAssertEqual(ip1 == ip1, true)
XCTAssertEqual(ip1 >= ip1, true)
XCTAssertEqual(ip1 > ip1, false)
XCTAssertEqual(ip1.compare(ip2), ComparisonResult.orderedAscending)
XCTAssertEqual(ip1 < ip2, true)
XCTAssertEqual(ip1 <= ip2, true)
XCTAssertEqual(ip1 == ip2, false)
XCTAssertEqual(ip1 >= ip2, false)
XCTAssertEqual(ip1 > ip2, false)
XCTAssertEqual(ip1.compare(ip3), ComparisonResult.orderedAscending)
XCTAssertEqual(ip1 < ip3, true)
XCTAssertEqual(ip1 <= ip3, true)
XCTAssertEqual(ip1 == ip3, false)
XCTAssertEqual(ip1 >= ip3, false)
XCTAssertEqual(ip1 > ip3, false)
XCTAssertEqual(ip1.compare(ip4), ComparisonResult.orderedDescending)
XCTAssertEqual(ip1 < ip4, false)
XCTAssertEqual(ip1 <= ip4, false)
XCTAssertEqual(ip1 == ip4, false)
XCTAssertEqual(ip1 >= ip4, true)
XCTAssertEqual(ip1 > ip4, true)
XCTAssertEqual(ip1.compare(ip5), ComparisonResult.orderedDescending)
XCTAssertEqual(ip1 < ip5, false)
XCTAssertEqual(ip1 <= ip5, false)
XCTAssertEqual(ip1 == ip5, false)
XCTAssertEqual(ip1 >= ip5, true)
XCTAssertEqual(ip1 > ip5, true)
XCTAssertEqual(ip2.compare(ip1), ComparisonResult.orderedDescending)
XCTAssertEqual(ip2 < ip1, false)
XCTAssertEqual(ip2 <= ip1, false)
XCTAssertEqual(ip2 == ip1, false)
XCTAssertEqual(ip2 >= ip1, true)
XCTAssertEqual(ip2 > ip1, true)
XCTAssertEqual(ip2.compare(ip2), ComparisonResult.orderedSame)
XCTAssertEqual(ip2 < ip2, false)
XCTAssertEqual(ip2 <= ip2, true)
XCTAssertEqual(ip2 == ip2, true)
XCTAssertEqual(ip2 >= ip2, true)
XCTAssertEqual(ip2 > ip2, false)
XCTAssertEqual(ip2.compare(ip3), ComparisonResult.orderedAscending)
XCTAssertEqual(ip2 < ip3, true)
XCTAssertEqual(ip2 <= ip3, true)
XCTAssertEqual(ip2 == ip3, false)
XCTAssertEqual(ip2 >= ip3, false)
XCTAssertEqual(ip2 > ip3, false)
XCTAssertEqual(ip2.compare(ip4), ComparisonResult.orderedDescending)
XCTAssertEqual(ip2.compare(ip5), ComparisonResult.orderedDescending)
XCTAssertEqual(ip3.compare(ip1), ComparisonResult.orderedDescending)
XCTAssertEqual(ip3.compare(ip2), ComparisonResult.orderedDescending)
XCTAssertEqual(ip3.compare(ip3), ComparisonResult.orderedSame)
XCTAssertEqual(ip3.compare(ip4), ComparisonResult.orderedDescending)
XCTAssertEqual(ip3.compare(ip5), ComparisonResult.orderedDescending)
XCTAssertEqual(ip4.compare(ip1), ComparisonResult.orderedAscending)
XCTAssertEqual(ip4.compare(ip2), ComparisonResult.orderedAscending)
XCTAssertEqual(ip4.compare(ip3), ComparisonResult.orderedAscending)
XCTAssertEqual(ip4.compare(ip4), ComparisonResult.orderedSame)
XCTAssertEqual(ip4.compare(ip5), ComparisonResult.orderedAscending)
XCTAssertEqual(ip5.compare(ip1), ComparisonResult.orderedAscending)
XCTAssertEqual(ip5.compare(ip2), ComparisonResult.orderedAscending)
XCTAssertEqual(ip5.compare(ip3), ComparisonResult.orderedAscending)
XCTAssertEqual(ip5.compare(ip4), ComparisonResult.orderedDescending)
XCTAssertEqual(ip5.compare(ip5), ComparisonResult.orderedSame)
let ip6: IndexPath = [1, 1]
XCTAssertEqual(ip6.compare(ip5), ComparisonResult.orderedAscending)
XCTAssertEqual(ip5.compare(ip6), ComparisonResult.orderedDescending)
}
func testHashing() {
let ip1: IndexPath = [5, 1]
let ip2: IndexPath = [1, 1, 1]
XCTAssertNotEqual(ip1.hashValue, ip2.hashValue)
// this should not cause an overflow crash
let hash: Int? = IndexPath(indexes: [Int.max >> 8, 2, Int.max >> 36]).hashValue
XCTAssertNotNil(hash)
}
func testEquality() {
let ip1: IndexPath = [1, 1]
let ip2: IndexPath = [1, 1]
let ip3: IndexPath = [1, 1, 1]
let ip4: IndexPath = []
let ip5: IndexPath = [1]
XCTAssertTrue(ip1 == ip2)
XCTAssertFalse(ip1 == ip3)
XCTAssertFalse(ip1 == ip4)
XCTAssertFalse(ip4 == ip1)
XCTAssertFalse(ip5 == ip1)
XCTAssertFalse(ip5 == ip4)
XCTAssertTrue(ip4 == ip4)
XCTAssertTrue(ip5 == ip5)
}
func testSubscripting() {
var ip1: IndexPath = [1]
var ip2: IndexPath = [1, 2]
var ip3: IndexPath = [1, 2, 3]
XCTAssertEqual(ip1[0], 1)
XCTAssertEqual(ip2[0], 1)
XCTAssertEqual(ip2[1], 2)
XCTAssertEqual(ip3[0], 1)
XCTAssertEqual(ip3[1], 2)
XCTAssertEqual(ip3[2], 3)
ip1[0] = 2
XCTAssertEqual(ip1[0], 2)
ip2[0] = 2
ip2[1] = 3
XCTAssertEqual(ip2[0], 2)
XCTAssertEqual(ip2[1], 3)
ip3[0] = 2
ip3[1] = 3
ip3[2] = 4
XCTAssertEqual(ip3[0], 2)
XCTAssertEqual(ip3[1], 3)
XCTAssertEqual(ip3[2], 4)
let ip4 = ip3[0..<2]
XCTAssertEqual(ip4.count, 2)
XCTAssertEqual(ip4[0], 2)
XCTAssertEqual(ip4[1], 3)
}
func testAppending() {
var ip : IndexPath = [1, 2, 3, 4]
let ip2 = IndexPath(indexes: [5, 6, 7])
ip.append(ip2)
XCTAssertEqual(ip.count, 7)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[6], 7)
let ip3 = ip.appending(IndexPath(indexes: [8, 9]))
XCTAssertEqual(ip3.count, 9)
XCTAssertEqual(ip3[7], 8)
XCTAssertEqual(ip3[8], 9)
let ip4 = ip3.appending([10, 11])
XCTAssertEqual(ip4.count, 11)
XCTAssertEqual(ip4[9], 10)
XCTAssertEqual(ip4[10], 11)
let ip5 = ip.appending(8)
XCTAssertEqual(ip5.count, 8)
XCTAssertEqual(ip5[7], 8)
}
func testAppendEmpty() {
var ip: IndexPath = []
ip.append(1)
XCTAssertEqual(ip.count, 1)
XCTAssertEqual(ip[0], 1)
ip.append(2)
XCTAssertEqual(ip.count, 2)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 2)
ip.append(3)
XCTAssertEqual(ip.count, 3)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 2)
XCTAssertEqual(ip[2], 3)
ip.append(4)
XCTAssertEqual(ip.count, 4)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 2)
XCTAssertEqual(ip[2], 3)
XCTAssertEqual(ip[3], 4)
}
func testAppendEmptyIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: []))
XCTAssertEqual(ip.count, 0)
}
func testAppendManyIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1, 2, 3]))
XCTAssertEqual(ip.count, 3)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 2)
XCTAssertEqual(ip[2], 3)
}
func testAppendEmptyIndexPathToSingle() {
var ip: IndexPath = [1]
ip.append(IndexPath(indexes: []))
XCTAssertEqual(ip.count, 1)
XCTAssertEqual(ip[0], 1)
}
func testAppendSingleIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1]))
XCTAssertEqual(ip.count, 1)
XCTAssertEqual(ip[0], 1)
}
func testAppendSingleIndexPathToSingle() {
var ip: IndexPath = [1]
ip.append(IndexPath(indexes: [1]))
XCTAssertEqual(ip.count, 2)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 1)
}
func testAppendPairIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1, 2]))
XCTAssertEqual(ip.count, 2)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 2)
}
func testAppendManyIndexPathToEmpty() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1, 2, 3]))
XCTAssertEqual(ip.count, 3)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[1], 2)
XCTAssertEqual(ip[2], 3)
}
func testAppendByOperator() {
let ip1: IndexPath = []
let ip2: IndexPath = []
let ip3 = ip1 + ip2
XCTAssertEqual(ip3.count, 0)
let ip4: IndexPath = [1]
let ip5: IndexPath = [2]
let ip6 = ip4 + ip5
XCTAssertEqual(ip6.count, 2)
XCTAssertEqual(ip6[0], 1)
XCTAssertEqual(ip6[1], 2)
var ip7: IndexPath = []
ip7 += ip6
XCTAssertEqual(ip7.count, 2)
XCTAssertEqual(ip7[0], 1)
XCTAssertEqual(ip7[1], 2)
}
func testAppendArray() {
var ip: IndexPath = [1, 2, 3, 4]
let indexes = [5, 6, 7]
ip.append(indexes)
XCTAssertEqual(ip.count, 7)
XCTAssertEqual(ip[0], 1)
XCTAssertEqual(ip[6], 7)
}
func testRanges() {
let ip1 = IndexPath(indexes: [1, 2, 3])
let ip2 = IndexPath(indexes: [6, 7, 8])
// Replace the whole range
var mutateMe = ip1
mutateMe[0..<3] = ip2
XCTAssertEqual(mutateMe, ip2)
// Insert at the beginning
mutateMe = ip1
mutateMe[0..<0] = ip2
XCTAssertEqual(mutateMe, IndexPath(indexes: [6, 7, 8, 1, 2, 3]))
// Insert at the end
mutateMe = ip1
mutateMe[3..<3] = ip2
XCTAssertEqual(mutateMe, IndexPath(indexes: [1, 2, 3, 6, 7, 8]))
// Insert in middle
mutateMe = ip1
mutateMe[2..<2] = ip2
XCTAssertEqual(mutateMe, IndexPath(indexes: [1, 2, 6, 7, 8, 3]))
}
func testRangeFromEmpty() {
let ip1 = IndexPath()
let ip2 = ip1[0..<0]
XCTAssertEqual(ip2.count, 0)
}
func testRangeFromSingle() {
let ip1 = IndexPath(indexes: [1])
let ip2 = ip1[0..<0]
XCTAssertEqual(ip2.count, 0)
let ip3 = ip1[0..<1]
XCTAssertEqual(ip3.count, 1)
XCTAssertEqual(ip3[0], 1)
}
func testRangeFromPair() {
let ip1 = IndexPath(indexes: [1, 2])
let ip2 = ip1[0..<0]
XCTAssertEqual(ip2.count, 0)
let ip3 = ip1[0..<1]
XCTAssertEqual(ip3.count, 1)
XCTAssertEqual(ip3[0], 1)
let ip4 = ip1[1..<1]
XCTAssertEqual(ip4.count, 0)
let ip5 = ip1[0..<2]
XCTAssertEqual(ip5.count, 2)
XCTAssertEqual(ip5[0], 1)
XCTAssertEqual(ip5[1], 2)
let ip6 = ip1[1..<2]
XCTAssertEqual(ip6.count, 1)
XCTAssertEqual(ip6[0], 2)
let ip7 = ip1[2..<2]
XCTAssertEqual(ip7.count, 0)
}
func testRangeFromMany() {
let ip1 = IndexPath(indexes: [1, 2, 3])
let ip2 = ip1[0..<0]
XCTAssertEqual(ip2.count, 0)
let ip3 = ip1[0..<1]
XCTAssertEqual(ip3.count, 1)
let ip4 = ip1[0..<2]
XCTAssertEqual(ip4.count, 2)
let ip5 = ip1[0..<3]
XCTAssertEqual(ip5.count, 3)
}
func testRangeReplacementSingle() {
var ip1 = IndexPath(indexes: [1])
ip1[0..<1] = IndexPath(indexes: [2])
XCTAssertEqual(ip1[0], 2)
ip1[0..<1] = IndexPath(indexes: [])
XCTAssertEqual(ip1.count, 0)
}
func testRangeReplacementPair() {
var ip1 = IndexPath(indexes: [1, 2])
ip1[0..<1] = IndexPath(indexes: [2, 3])
XCTAssertEqual(ip1.count, 3)
XCTAssertEqual(ip1[0], 2)
XCTAssertEqual(ip1[1], 3)
XCTAssertEqual(ip1[2], 2)
ip1[0..<1] = IndexPath(indexes: [])
XCTAssertEqual(ip1.count, 2)
}
func testMoreRanges() {
var ip = IndexPath(indexes: [1, 2, 3])
let ip2 = IndexPath(indexes: [5, 6, 7, 8, 9, 10])
ip[1..<2] = ip2
XCTAssertEqual(ip, IndexPath(indexes: [1, 5, 6, 7, 8, 9, 10, 3]))
}
func testIteration() {
let ip = IndexPath(indexes: [1, 2, 3])
var count = 0
for _ in ip {
count += 1
}
XCTAssertEqual(3, count)
}
func testDescription() {
let ip1: IndexPath = []
let ip2: IndexPath = [1]
let ip3: IndexPath = [1, 2]
let ip4: IndexPath = [1, 2, 3]
XCTAssertEqual(ip1.description, "[]")
XCTAssertEqual(ip2.description, "[1]")
XCTAssertEqual(ip3.description, "[1, 2]")
XCTAssertEqual(ip4.description, "[1, 2, 3]")
XCTAssertEqual(ip1.debugDescription, ip1.description)
XCTAssertEqual(ip2.debugDescription, ip2.description)
XCTAssertEqual(ip3.debugDescription, ip3.description)
XCTAssertEqual(ip4.debugDescription, ip4.description)
}
func testBridgeToObjC() {
let ip1: IndexPath = []
let ip2: IndexPath = [1]
let ip3: IndexPath = [1, 2]
let ip4: IndexPath = [1, 2, 3]
let nsip1 = ip1._bridgeToObjectiveC()
let nsip2 = ip2._bridgeToObjectiveC()
let nsip3 = ip3._bridgeToObjectiveC()
let nsip4 = ip4._bridgeToObjectiveC()
XCTAssertEqual(nsip1.length, 0)
XCTAssertEqual(nsip2.length, 1)
XCTAssertEqual(nsip3.length, 2)
XCTAssertEqual(nsip4.length, 3)
}
func testForceBridgeFromObjC() {
let nsip1 = NSIndexPath()
let nsip2 = NSIndexPath(index: 1)
let nsip3 = [1, 2].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<Int>) -> NSIndexPath in
return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count)
}
let nsip4 = [1, 2, 3].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<Int>) -> NSIndexPath in
return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count)
}
var ip1: IndexPath? = IndexPath()
IndexPath._forceBridgeFromObjectiveC(nsip1, result: &ip1)
XCTAssertNotNil(ip1)
XCTAssertEqual(ip1!.count, 0)
var ip2: IndexPath? = IndexPath()
IndexPath._forceBridgeFromObjectiveC(nsip2, result: &ip2)
XCTAssertNotNil(ip2)
XCTAssertEqual(ip2!.count, 1)
XCTAssertEqual(ip2![0], 1)
var ip3: IndexPath? = IndexPath()
IndexPath._forceBridgeFromObjectiveC(nsip3, result: &ip3)
XCTAssertNotNil(ip3)
XCTAssertEqual(ip3!.count, 2)
XCTAssertEqual(ip3![0], 1)
XCTAssertEqual(ip3![1], 2)
var ip4: IndexPath? = IndexPath()
IndexPath._forceBridgeFromObjectiveC(nsip4, result: &ip4)
XCTAssertNotNil(ip4)
XCTAssertEqual(ip4!.count, 3)
XCTAssertEqual(ip4![0], 1)
XCTAssertEqual(ip4![1], 2)
XCTAssertEqual(ip4![2], 3)
}
func testConditionalBridgeFromObjC() {
let nsip1 = NSIndexPath()
let nsip2 = NSIndexPath(index: 1)
let nsip3 = [1, 2].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<Int>) -> NSIndexPath in
return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count)
}
let nsip4 = [1, 2, 3].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<Int>) -> NSIndexPath in
return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count)
}
var ip1: IndexPath? = IndexPath()
XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip1, result: &ip1))
XCTAssertNotNil(ip1)
XCTAssertEqual(ip1!.count, 0)
var ip2: IndexPath? = IndexPath()
XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip2, result: &ip2))
XCTAssertNotNil(ip2)
XCTAssertEqual(ip2!.count, 1)
XCTAssertEqual(ip2![0], 1)
var ip3: IndexPath? = IndexPath()
XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip3, result: &ip3))
XCTAssertNotNil(ip3)
XCTAssertEqual(ip3!.count, 2)
XCTAssertEqual(ip3![0], 1)
XCTAssertEqual(ip3![1], 2)
var ip4: IndexPath? = IndexPath()
XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip4, result: &ip4))
XCTAssertNotNil(ip4)
XCTAssertEqual(ip4!.count, 3)
XCTAssertEqual(ip4![0], 1)
XCTAssertEqual(ip4![1], 2)
XCTAssertEqual(ip4![2], 3)
}
func testUnconditionalBridgeFromObjC() {
let nsip1 = NSIndexPath()
let nsip2 = NSIndexPath(index: 1)
let nsip3 = [1, 2].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<Int>) -> NSIndexPath in
return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count)
}
let nsip4 = [1, 2, 3].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<Int>) -> NSIndexPath in
return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count)
}
let ip1: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip1)
XCTAssertEqual(ip1.count, 0)
var ip2: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip2)
XCTAssertEqual(ip2.count, 1)
XCTAssertEqual(ip2[0], 1)
var ip3: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip3)
XCTAssertEqual(ip3.count, 2)
XCTAssertEqual(ip3[0], 1)
XCTAssertEqual(ip3[1], 2)
var ip4: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip4)
XCTAssertEqual(ip4.count, 3)
XCTAssertEqual(ip4[0], 1)
XCTAssertEqual(ip4[1], 2)
XCTAssertEqual(ip4[2], 3)
}
func testObjcBridgeType() {
XCTAssertTrue(IndexPath._getObjectiveCType() == NSIndexPath.self)
}
func test_AnyHashableContainingIndexPath() {
let values: [IndexPath] = [
IndexPath(indexes: [1, 2]),
IndexPath(indexes: [1, 2, 3]),
IndexPath(indexes: [1, 2, 3]),
]
let anyHashables = values.map(AnyHashable.init)
XCTAssert(IndexPath.self == type(of: anyHashables[0].base))
XCTAssert(IndexPath.self == type(of: anyHashables[1].base))
XCTAssert(IndexPath.self == type(of: anyHashables[2].base))
XCTAssertNotEqual(anyHashables[0], anyHashables[1])
XCTAssertEqual(anyHashables[1], anyHashables[2])
}
func test_AnyHashableCreatedFromNSIndexPath() {
let values: [NSIndexPath] = [
NSIndexPath(index: 1),
NSIndexPath(index: 2),
NSIndexPath(index: 2),
]
let anyHashables = values.map(AnyHashable.init)
XCTAssert(IndexPath.self == type(of: anyHashables[0].base))
XCTAssert(IndexPath.self == type(of: anyHashables[1].base))
XCTAssert(IndexPath.self == type(of: anyHashables[2].base))
XCTAssertNotEqual(anyHashables[0], anyHashables[1])
XCTAssertEqual(anyHashables[1], anyHashables[2])
}
func test_unconditionallyBridgeFromObjectiveC() {
XCTAssertEqual(IndexPath(), IndexPath._unconditionallyBridgeFromObjectiveC(nil))
}
func test_slice_1ary() {
let indexPath: IndexPath = [0]
let res = indexPath.dropFirst()
XCTAssertEqual(0, res.count)
let slice = indexPath[1..<1]
XCTAssertEqual(0, slice.count)
}
}