blob: 79112b9ac9c8f0a017da733e6a7ee88bb178465c [file] [log] [blame]
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
// REQUIRES: objc_interop
import Foundation
#if FOUNDATION_XCTEST
import XCTest
class TestIndexPathSuper : XCTestCase { }
#else
import StdlibUnittest
class TestIndexPathSuper { }
#endif
class TestIndexPath: TestIndexPathSuper {
func testEmpty() {
let ip = IndexPath()
expectEqual(ip.count, 0)
}
func testSingleIndex() {
let ip = IndexPath(index: 1)
expectEqual(ip.count, 1)
expectEqual(ip[0], 1)
let highValueIp = IndexPath(index: .max)
expectEqual(highValueIp.count, 1)
expectEqual(highValueIp[0], .max)
let lowValueIp = IndexPath(index: .min)
expectEqual(lowValueIp.count, 1)
expectEqual(lowValueIp[0], .min)
}
func testTwoIndexes() {
let ip = IndexPath(indexes: [0, 1])
expectEqual(ip.count, 2)
expectEqual(ip[0], 0)
expectEqual(ip[1], 1)
}
func testManyIndexes() {
let ip = IndexPath(indexes: [0, 1, 2, 3, 4])
expectEqual(ip.count, 5)
expectEqual(ip[0], 0)
expectEqual(ip[1], 1)
expectEqual(ip[2], 2)
expectEqual(ip[3], 3)
expectEqual(ip[4], 4)
}
func testCreateFromSequence() {
let seq = repeatElement(5, count: 3)
let ip = IndexPath(indexes: seq)
expectEqual(ip.count, 3)
expectEqual(ip[0], 5)
expectEqual(ip[1], 5)
expectEqual(ip[2], 5)
}
func testCreateFromLiteral() {
let ip: IndexPath = [1, 2, 3, 4]
expectEqual(ip.count, 4)
expectEqual(ip[0], 1)
expectEqual(ip[1], 2)
expectEqual(ip[2], 3)
expectEqual(ip[3], 4)
}
func testDropLast() {
let ip: IndexPath = [1, 2, 3, 4]
let ip2 = ip.dropLast()
expectEqual(ip2.count, 3)
expectEqual(ip2[0], 1)
expectEqual(ip2[1], 2)
expectEqual(ip2[2], 3)
}
func testDropLastFromEmpty() {
let ip: IndexPath = []
let ip2 = ip.dropLast()
expectEqual(ip2.count, 0)
}
func testDropLastFromSingle() {
let ip: IndexPath = [1]
let ip2 = ip.dropLast()
expectEqual(ip2.count, 0)
}
func testDropLastFromPair() {
let ip: IndexPath = [1, 2]
let ip2 = ip.dropLast()
expectEqual(ip2.count, 1)
expectEqual(ip2[0], 1)
}
func testDropLastFromTriple() {
let ip: IndexPath = [1, 2, 3]
let ip2 = ip.dropLast()
expectEqual(ip2.count, 2)
expectEqual(ip2[0], 1)
expectEqual(ip2[1], 2)
}
func testStartEndIndex() {
let ip: IndexPath = [1, 2, 3, 4]
expectEqual(ip.startIndex, 0)
expectEqual(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
}
expectEqual(sum, 1 + 2 + 3 + 4)
}
func testIndexing() {
let ip: IndexPath = [1, 2, 3, 4]
expectEqual(ip.index(before: 1), 0)
expectEqual(ip.index(before: 0), -1) // beyond range!
expectEqual(ip.index(after: 1), 2)
expectEqual(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]
expectEqual(ip1.compare(ip1), ComparisonResult.orderedSame)
expectEqual(ip1 < ip1, false)
expectEqual(ip1 <= ip1, true)
expectEqual(ip1 == ip1, true)
expectEqual(ip1 >= ip1, true)
expectEqual(ip1 > ip1, false)
expectEqual(ip1.compare(ip2), ComparisonResult.orderedAscending)
expectEqual(ip1 < ip2, true)
expectEqual(ip1 <= ip2, true)
expectEqual(ip1 == ip2, false)
expectEqual(ip1 >= ip2, false)
expectEqual(ip1 > ip2, false)
expectEqual(ip1.compare(ip3), ComparisonResult.orderedAscending)
expectEqual(ip1 < ip3, true)
expectEqual(ip1 <= ip3, true)
expectEqual(ip1 == ip3, false)
expectEqual(ip1 >= ip3, false)
expectEqual(ip1 > ip3, false)
expectEqual(ip1.compare(ip4), ComparisonResult.orderedDescending)
expectEqual(ip1 < ip4, false)
expectEqual(ip1 <= ip4, false)
expectEqual(ip1 == ip4, false)
expectEqual(ip1 >= ip4, true)
expectEqual(ip1 > ip4, true)
expectEqual(ip1.compare(ip5), ComparisonResult.orderedDescending)
expectEqual(ip1 < ip5, false)
expectEqual(ip1 <= ip5, false)
expectEqual(ip1 == ip5, false)
expectEqual(ip1 >= ip5, true)
expectEqual(ip1 > ip5, true)
expectEqual(ip2.compare(ip1), ComparisonResult.orderedDescending)
expectEqual(ip2 < ip1, false)
expectEqual(ip2 <= ip1, false)
expectEqual(ip2 == ip1, false)
expectEqual(ip2 >= ip1, true)
expectEqual(ip2 > ip1, true)
expectEqual(ip2.compare(ip2), ComparisonResult.orderedSame)
expectEqual(ip2 < ip2, false)
expectEqual(ip2 <= ip2, true)
expectEqual(ip2 == ip2, true)
expectEqual(ip2 >= ip2, true)
expectEqual(ip2 > ip2, false)
expectEqual(ip2.compare(ip3), ComparisonResult.orderedAscending)
expectEqual(ip2 < ip3, true)
expectEqual(ip2 <= ip3, true)
expectEqual(ip2 == ip3, false)
expectEqual(ip2 >= ip3, false)
expectEqual(ip2 > ip3, false)
expectEqual(ip2.compare(ip4), ComparisonResult.orderedDescending)
expectEqual(ip2.compare(ip5), ComparisonResult.orderedDescending)
expectEqual(ip3.compare(ip1), ComparisonResult.orderedDescending)
expectEqual(ip3.compare(ip2), ComparisonResult.orderedDescending)
expectEqual(ip3.compare(ip3), ComparisonResult.orderedSame)
expectEqual(ip3.compare(ip4), ComparisonResult.orderedDescending)
expectEqual(ip3.compare(ip5), ComparisonResult.orderedDescending)
expectEqual(ip4.compare(ip1), ComparisonResult.orderedAscending)
expectEqual(ip4.compare(ip2), ComparisonResult.orderedAscending)
expectEqual(ip4.compare(ip3), ComparisonResult.orderedAscending)
expectEqual(ip4.compare(ip4), ComparisonResult.orderedSame)
expectEqual(ip4.compare(ip5), ComparisonResult.orderedAscending)
expectEqual(ip5.compare(ip1), ComparisonResult.orderedAscending)
expectEqual(ip5.compare(ip2), ComparisonResult.orderedAscending)
expectEqual(ip5.compare(ip3), ComparisonResult.orderedAscending)
expectEqual(ip5.compare(ip4), ComparisonResult.orderedDescending)
expectEqual(ip5.compare(ip5), ComparisonResult.orderedSame)
let ip6: IndexPath = [1, 1]
expectEqual(ip6.compare(ip5), ComparisonResult.orderedAscending)
expectEqual(ip5.compare(ip6), ComparisonResult.orderedDescending)
}
func testHashing() {
let ip1: IndexPath = [5, 1]
let ip2: IndexPath = [1, 1, 1]
expectNotEqual(ip1.hashValue, ip2.hashValue)
IndexPath(indexes: [Int.max >> 8, 2, Int.max >> 36]).hashValue // this should not cause an overflow crash
}
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]
expectTrue(ip1 == ip2)
expectFalse(ip1 == ip3)
expectFalse(ip1 == ip4)
expectFalse(ip4 == ip1)
expectFalse(ip5 == ip1)
expectFalse(ip5 == ip4)
expectTrue(ip4 == ip4)
expectTrue(ip5 == ip5)
}
func testSubscripting() {
var ip1: IndexPath = [1]
var ip2: IndexPath = [1, 2]
var ip3: IndexPath = [1, 2, 3]
expectEqual(ip1[0], 1)
expectEqual(ip2[0], 1)
expectEqual(ip2[1], 2)
expectEqual(ip3[0], 1)
expectEqual(ip3[1], 2)
expectEqual(ip3[2], 3)
ip1[0] = 2
expectEqual(ip1[0], 2)
ip2[0] = 2
ip2[1] = 3
expectEqual(ip2[0], 2)
expectEqual(ip2[1], 3)
ip3[0] = 2
ip3[1] = 3
ip3[2] = 4
expectEqual(ip3[0], 2)
expectEqual(ip3[1], 3)
expectEqual(ip3[2], 4)
let ip4 = ip3[0..<2]
expectEqual(ip4.count, 2)
expectEqual(ip4[0], 2)
expectEqual(ip4[1], 3)
}
func testAppending() {
var ip : IndexPath = [1, 2, 3, 4]
let ip2 = IndexPath(indexes: [5, 6, 7])
ip.append(ip2)
expectEqual(ip.count, 7)
expectEqual(ip[0], 1)
expectEqual(ip[6], 7)
let ip3 = ip.appending(IndexPath(indexes: [8, 9]))
expectEqual(ip3.count, 9)
expectEqual(ip3[7], 8)
expectEqual(ip3[8], 9)
let ip4 = ip3.appending([10, 11])
expectEqual(ip4.count, 11)
expectEqual(ip4[9], 10)
expectEqual(ip4[10], 11)
let ip5 = ip.appending(8)
expectEqual(ip5.count, 8)
expectEqual(ip5[7], 8)
}
func testAppendEmpty() {
var ip: IndexPath = []
ip.append(1)
expectEqual(ip.count, 1)
expectEqual(ip[0], 1)
ip.append(2)
expectEqual(ip.count, 2)
expectEqual(ip[0], 1)
expectEqual(ip[1], 2)
ip.append(3)
expectEqual(ip.count, 3)
expectEqual(ip[0], 1)
expectEqual(ip[1], 2)
expectEqual(ip[2], 3)
ip.append(4)
expectEqual(ip.count, 4)
expectEqual(ip[0], 1)
expectEqual(ip[1], 2)
expectEqual(ip[2], 3)
expectEqual(ip[3], 4)
}
func testAppendEmptyIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: []))
expectEqual(ip.count, 0)
}
func testAppendManyIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1, 2, 3]))
expectEqual(ip.count, 3)
expectEqual(ip[0], 1)
expectEqual(ip[1], 2)
expectEqual(ip[2], 3)
}
func testAppendEmptyIndexPathToSingle() {
var ip: IndexPath = [1]
ip.append(IndexPath(indexes: []))
expectEqual(ip.count, 1)
expectEqual(ip[0], 1)
}
func testAppendSingleIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1]))
expectEqual(ip.count, 1)
expectEqual(ip[0], 1)
}
func testAppendSingleIndexPathToSingle() {
var ip: IndexPath = [1]
ip.append(IndexPath(indexes: [1]))
expectEqual(ip.count, 2)
expectEqual(ip[0], 1)
expectEqual(ip[1], 1)
}
func testAppendPairIndexPath() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1, 2]))
expectEqual(ip.count, 2)
expectEqual(ip[0], 1)
expectEqual(ip[1], 2)
}
func testAppendManyIndexPathToEmpty() {
var ip: IndexPath = []
ip.append(IndexPath(indexes: [1, 2, 3]))
expectEqual(ip.count, 3)
expectEqual(ip[0], 1)
expectEqual(ip[1], 2)
expectEqual(ip[2], 3)
}
func testAppendByOperator() {
let ip1: IndexPath = []
let ip2: IndexPath = []
let ip3 = ip1 + ip2
expectEqual(ip3.count, 0)
let ip4: IndexPath = [1]
let ip5: IndexPath = [2]
let ip6 = ip4 + ip5
expectEqual(ip6.count, 2)
expectEqual(ip6[0], 1)
expectEqual(ip6[1], 2)
var ip7: IndexPath = []
ip7 += ip6
expectEqual(ip7.count, 2)
expectEqual(ip7[0], 1)
expectEqual(ip7[1], 2)
}
func testAppendArray() {
var ip: IndexPath = [1, 2, 3, 4]
let indexes = [5, 6, 7]
ip.append(indexes)
expectEqual(ip.count, 7)
expectEqual(ip[0], 1)
expectEqual(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
expectEqual(mutateMe, ip2)
// Insert at the beginning
mutateMe = ip1
mutateMe[0..<0] = ip2
expectEqual(mutateMe, IndexPath(indexes: [6, 7, 8, 1, 2, 3]))
// Insert at the end
mutateMe = ip1
mutateMe[3..<3] = ip2
expectEqual(mutateMe, IndexPath(indexes: [1, 2, 3, 6, 7, 8]))
// Insert in middle
mutateMe = ip1
mutateMe[2..<2] = ip2
expectEqual(mutateMe, IndexPath(indexes: [1, 2, 6, 7, 8, 3]))
}
func testRangeFromEmpty() {
let ip1 = IndexPath()
let ip2 = ip1[0..<0]
expectEqual(ip2.count, 0)
}
func testRangeFromSingle() {
let ip1 = IndexPath(indexes: [1])
let ip2 = ip1[0..<0]
expectEqual(ip2.count, 0)
let ip3 = ip1[0..<1]
expectEqual(ip3.count, 1)
expectEqual(ip3[0], 1)
}
func testRangeFromPair() {
let ip1 = IndexPath(indexes: [1, 2])
let ip2 = ip1[0..<0]
expectEqual(ip2.count, 0)
let ip3 = ip1[0..<1]
expectEqual(ip3.count, 1)
expectEqual(ip3[0], 1)
let ip4 = ip1[1..<1]
expectEqual(ip4.count, 0)
let ip5 = ip1[0..<2]
expectEqual(ip5.count, 2)
expectEqual(ip5[0], 1)
expectEqual(ip5[1], 2)
let ip6 = ip1[1..<2]
expectEqual(ip6.count, 1)
expectEqual(ip6[0], 2)
let ip7 = ip1[2..<2]
expectEqual(ip7.count, 0)
}
func testRangeFromMany() {
let ip1 = IndexPath(indexes: [1, 2, 3])
let ip2 = ip1[0..<0]
expectEqual(ip2.count, 0)
let ip3 = ip1[0..<1]
expectEqual(ip3.count, 1)
let ip4 = ip1[0..<2]
expectEqual(ip4.count, 2)
let ip5 = ip1[0..<3]
expectEqual(ip5.count, 3)
}
func testRangeReplacementSingle() {
var ip1 = IndexPath(indexes: [1])
ip1[0..<1] = IndexPath(indexes: [2])
expectEqual(ip1[0], 2)
ip1[0..<1] = IndexPath(indexes: [])
expectEqual(ip1.count, 0)
}
func testRangeReplacementPair() {
var ip1 = IndexPath(indexes: [1, 2])
ip1[0..<1] = IndexPath(indexes: [2, 3])
expectEqual(ip1.count, 3)
expectEqual(ip1[0], 2)
expectEqual(ip1[1], 3)
expectEqual(ip1[2], 2)
ip1[0..<1] = IndexPath(indexes: [])
expectEqual(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
expectEqual(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
}
expectEqual(3, count)
}
func testDescription() {
let ip1: IndexPath = []
let ip2: IndexPath = [1]
let ip3: IndexPath = [1, 2]
let ip4: IndexPath = [1, 2, 3]
expectEqual(ip1.description, "[]")
expectEqual(ip2.description, "[1]")
expectEqual(ip3.description, "[1, 2]")
expectEqual(ip4.description, "[1, 2, 3]")
expectEqual(ip1.debugDescription, ip1.description)
expectEqual(ip2.debugDescription, ip2.description)
expectEqual(ip3.debugDescription, ip3.description)
expectEqual(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()
expectEqual(nsip1.length, 0)
expectEqual(nsip2.length, 1)
expectEqual(nsip3.length, 2)
expectEqual(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)
expectNotNil(ip1)
expectEqual(ip1!.count, 0)
var ip2: IndexPath? = IndexPath()
IndexPath._forceBridgeFromObjectiveC(nsip2, result: &ip2)
expectNotNil(ip2)
expectEqual(ip2!.count, 1)
expectEqual(ip2![0], 1)
var ip3: IndexPath? = IndexPath()
IndexPath._forceBridgeFromObjectiveC(nsip3, result: &ip3)
expectNotNil(ip3)
expectEqual(ip3!.count, 2)
expectEqual(ip3![0], 1)
expectEqual(ip3![1], 2)
var ip4: IndexPath? = IndexPath()
IndexPath._forceBridgeFromObjectiveC(nsip4, result: &ip4)
expectNotNil(ip4)
expectEqual(ip4!.count, 3)
expectEqual(ip4![0], 1)
expectEqual(ip4![1], 2)
expectEqual(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()
expectTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip1, result: &ip1))
expectNotNil(ip1)
expectEqual(ip1!.count, 0)
var ip2: IndexPath? = IndexPath()
expectTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip2, result: &ip2))
expectNotNil(ip2)
expectEqual(ip2!.count, 1)
expectEqual(ip2![0], 1)
var ip3: IndexPath? = IndexPath()
expectTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip3, result: &ip3))
expectNotNil(ip3)
expectEqual(ip3!.count, 2)
expectEqual(ip3![0], 1)
expectEqual(ip3![1], 2)
var ip4: IndexPath? = IndexPath()
expectTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip4, result: &ip4))
expectNotNil(ip4)
expectEqual(ip4!.count, 3)
expectEqual(ip4![0], 1)
expectEqual(ip4![1], 2)
expectEqual(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)
expectEqual(ip1.count, 0)
var ip2: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip2)
expectEqual(ip2.count, 1)
expectEqual(ip2[0], 1)
var ip3: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip3)
expectEqual(ip3.count, 2)
expectEqual(ip3[0], 1)
expectEqual(ip3[1], 2)
var ip4: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip4)
expectEqual(ip4.count, 3)
expectEqual(ip4[0], 1)
expectEqual(ip4[1], 2)
expectEqual(ip4[2], 3)
}
func testObjcBridgeType() {
expectTrue(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)
expectEqual(IndexPath.self, type(of: anyHashables[0].base))
expectEqual(IndexPath.self, type(of: anyHashables[1].base))
expectEqual(IndexPath.self, type(of: anyHashables[2].base))
expectNotEqual(anyHashables[0], anyHashables[1])
expectEqual(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)
expectEqual(IndexPath.self, type(of: anyHashables[0].base))
expectEqual(IndexPath.self, type(of: anyHashables[1].base))
expectEqual(IndexPath.self, type(of: anyHashables[2].base))
expectNotEqual(anyHashables[0], anyHashables[1])
expectEqual(anyHashables[1], anyHashables[2])
}
func test_unconditionallyBridgeFromObjectiveC() {
expectEqual(IndexPath(), IndexPath._unconditionallyBridgeFromObjectiveC(nil))
}
func test_slice_1ary() {
let indexPath: IndexPath = [0]
let res = indexPath.dropFirst()
expectEqual(0, res.count)
let slice = indexPath[1..<1]
expectEqual(0, slice.count)
}
func test_dropFirst() {
var pth = IndexPath(indexes:[1,2,3,4])
while !pth.isEmpty {
// this should not crash
pth = pth.dropFirst()
}
}
}
#if !FOUNDATION_XCTEST
var IndexPathTests = TestSuite("TestIndexPath")
IndexPathTests.test("testEmpty") { TestIndexPath().testEmpty() }
IndexPathTests.test("testSingleIndex") { TestIndexPath().testSingleIndex() }
IndexPathTests.test("testTwoIndexes") { TestIndexPath().testTwoIndexes() }
IndexPathTests.test("testManyIndexes") { TestIndexPath().testManyIndexes() }
IndexPathTests.test("testCreateFromSequence") { TestIndexPath().testCreateFromSequence() }
IndexPathTests.test("testCreateFromLiteral") { TestIndexPath().testCreateFromLiteral() }
IndexPathTests.test("testDropLast") { TestIndexPath().testDropLast() }
IndexPathTests.test("testDropLastFromEmpty") { TestIndexPath().testDropLastFromEmpty() }
IndexPathTests.test("testDropLastFromSingle") { TestIndexPath().testDropLastFromSingle() }
IndexPathTests.test("testDropLastFromPair") { TestIndexPath().testDropLastFromPair() }
IndexPathTests.test("testDropLastFromTriple") { TestIndexPath().testDropLastFromTriple() }
IndexPathTests.test("testStartEndIndex") { TestIndexPath().testStartEndIndex() }
IndexPathTests.test("testIterator") { TestIndexPath().testIterator() }
IndexPathTests.test("testIndexing") { TestIndexPath().testIndexing() }
IndexPathTests.test("testCompare") { TestIndexPath().testCompare() }
IndexPathTests.test("testHashing") { TestIndexPath().testHashing() }
IndexPathTests.test("testEquality") { TestIndexPath().testEquality() }
IndexPathTests.test("testSubscripting") { TestIndexPath().testSubscripting() }
IndexPathTests.test("testAppending") { TestIndexPath().testAppending() }
IndexPathTests.test("testAppendEmpty") { TestIndexPath().testAppendEmpty() }
IndexPathTests.test("testAppendEmptyIndexPath") { TestIndexPath().testAppendEmptyIndexPath() }
IndexPathTests.test("testAppendManyIndexPath") { TestIndexPath().testAppendManyIndexPath() }
IndexPathTests.test("testAppendEmptyIndexPathToSingle") { TestIndexPath().testAppendEmptyIndexPathToSingle() }
IndexPathTests.test("testAppendSingleIndexPath") { TestIndexPath().testAppendSingleIndexPath() }
IndexPathTests.test("testAppendSingleIndexPathToSingle") { TestIndexPath().testAppendSingleIndexPathToSingle() }
IndexPathTests.test("testAppendPairIndexPath") { TestIndexPath().testAppendPairIndexPath() }
IndexPathTests.test("testAppendManyIndexPathToEmpty") { TestIndexPath().testAppendManyIndexPathToEmpty() }
IndexPathTests.test("testAppendByOperator") { TestIndexPath().testAppendByOperator() }
IndexPathTests.test("testAppendArray") { TestIndexPath().testAppendArray() }
IndexPathTests.test("testRanges") { TestIndexPath().testRanges() }
IndexPathTests.test("testRangeFromEmpty") { TestIndexPath().testRangeFromEmpty() }
IndexPathTests.test("testRangeFromSingle") { TestIndexPath().testRangeFromSingle() }
IndexPathTests.test("testRangeFromPair") { TestIndexPath().testRangeFromPair() }
IndexPathTests.test("testRangeFromMany") { TestIndexPath().testRangeFromMany() }
IndexPathTests.test("testRangeReplacementSingle") { TestIndexPath().testRangeReplacementSingle() }
IndexPathTests.test("testRangeReplacementPair") { TestIndexPath().testRangeReplacementPair() }
IndexPathTests.test("testMoreRanges") { TestIndexPath().testMoreRanges() }
IndexPathTests.test("testIteration") { TestIndexPath().testIteration() }
IndexPathTests.test("testDescription") { TestIndexPath().testDescription() }
IndexPathTests.test("testBridgeToObjC") { TestIndexPath().testBridgeToObjC() }
IndexPathTests.test("testForceBridgeFromObjC") { TestIndexPath().testForceBridgeFromObjC() }
IndexPathTests.test("testConditionalBridgeFromObjC") { TestIndexPath().testConditionalBridgeFromObjC() }
IndexPathTests.test("testUnconditionalBridgeFromObjC") { TestIndexPath().testUnconditionalBridgeFromObjC() }
IndexPathTests.test("testObjcBridgeType") { TestIndexPath().testObjcBridgeType() }
IndexPathTests.test("test_AnyHashableContainingIndexPath") { TestIndexPath().test_AnyHashableContainingIndexPath() }
IndexPathTests.test("test_AnyHashableCreatedFromNSIndexPath") { TestIndexPath().test_AnyHashableCreatedFromNSIndexPath() }
IndexPathTests.test("test_unconditionallyBridgeFromObjectiveC") { TestIndexPath().test_unconditionallyBridgeFromObjectiveC() }
IndexPathTests.test("test_slice_1ary") { TestIndexPath().test_slice_1ary() }
IndexPathTests.test("test_dropFirst") { TestIndexPath().test_dropFirst() }
runAllTests()
#endif