// 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
