mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
* Make Range conditionally a Collection
* Convert ClosedRange to conditionally a collection
* De-gyb Range/ClosedRange, refactoring some methods.
* Remove use of Countable{Closed}Range from stdlib
* Remove Countable use from Foundation
* Fix test errors and warnings resulting from Range/CountableRange collapse
* fix prespecialize test for new mangling
* Update CoreAudio use of CountableRange
* Update SwiftSyntax use of CountableRange
* Restore ClosedRange.Index: Hashable conformance
* Move fixed typechecker slowness test for array-of-ranges from slow to fast, yay
* Apply Doug's patch to loosen test to just check for error
140 lines
5.1 KiB
Swift
140 lines
5.1 KiB
Swift
// -*- swift -*-
|
|
// RUN: %target-run-simple-swiftgyb
|
|
// REQUIRES: executable_test
|
|
|
|
import StdlibUnittest
|
|
import StdlibCollectionUnittest
|
|
|
|
var RangeReplaceableTestSuite = TestSuite("RangeReplaceable")
|
|
|
|
RangeReplaceableTestSuite.test("append/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.append(OpaqueValue(2))
|
|
expectCustomizable(tester, tester.log.append)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("appendContentsOf/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.append(contentsOf: [ 2, 3 ].map(OpaqueValue.init))
|
|
expectCustomizable(tester, tester.log.appendContentsOf)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("insert/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.insert(OpaqueValue(2), at: tester.base.startIndex)
|
|
expectCustomizable(tester, tester.log.insert)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("insert(contentsOf:at:)/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.insert(
|
|
contentsOf: [ 2, 3 ].map(OpaqueValue.init),
|
|
at: tester.base.endIndex)
|
|
expectCustomizable(tester, tester.log.insertContentsOf)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("remove(at:)/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.remove(at: tester.base.startIndex)
|
|
expectCustomizable(tester, tester.log.removeAt)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("removeLast/whereSelfIsBidirectionalCollection/dispatch") {
|
|
var tester = LoggingRangeReplaceableBidirectionalCollection(wrapping:
|
|
LoggingRangeReplaceableBidirectionalCollection(wrapping: [ OpaqueValue(1) ]))
|
|
_ = tester.removeLast()
|
|
expectCustomizable(tester, tester.log._customRemoveLast)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("removeLast(n: Int)/whereSelfIsBidirectionalCollection/dispatch") {
|
|
var tester = LoggingRangeReplaceableBidirectionalCollection(wrapping:
|
|
LoggingRangeReplaceableBidirectionalCollection(wrapping: [ OpaqueValue(1) ]))
|
|
_ = tester.removeLast(1)
|
|
expectCustomizable(tester, tester.log._customRemoveLastN)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("removeSubrange/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester(
|
|
[ 1, 2, 3 ].map(OpaqueValue.init))
|
|
tester.removeSubrange(tester.base.startIndex..<tester.base.endIndex)
|
|
expectCustomizable(tester, tester.log.removeSubrange)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("removeFirst/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.removeFirst()
|
|
expectCustomizable(tester, tester.log.removeFirst)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("removeFirst(n)/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.removeFirst(1)
|
|
expectCustomizable(tester, tester.log.removeFirstN)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("removeAll/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester([ OpaqueValue(1) ])
|
|
tester.removeAll(keepingCapacity: false)
|
|
expectCustomizable(tester, tester.log.removeAll)
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("replaceSubrange/strideableRange") {
|
|
for test in replaceRangeTests {
|
|
var c =
|
|
MinimalRangeReplaceableRandomAccessCollectionWithStrideableIndex(elements: test.collection)
|
|
let rangeToReplace = test.rangeSelection.range(in: c)
|
|
let newElements =
|
|
MinimalRangeReplaceableRandomAccessCollectionWithStrideableIndex(elements: test.newElements)
|
|
c.replaceSubrange(rangeToReplace, with: newElements)
|
|
expectEqualSequence(
|
|
test.expected,
|
|
c.map { $0.value },
|
|
stackTrace: SourceLocStack().with(test.loc))
|
|
}
|
|
}
|
|
|
|
RangeReplaceableTestSuite.test("replaceSubrange/strideableClosedRange") {
|
|
for test in replaceRangeTests {
|
|
guard let closedExpected = test.closedExpected else { continue }
|
|
var c =
|
|
MinimalRangeReplaceableRandomAccessCollectionWithStrideableIndex(elements: test.collection)
|
|
let rangeToReplace = test.rangeSelection.closedRange(in: c)
|
|
let newElements =
|
|
MinimalRangeReplaceableRandomAccessCollectionWithStrideableIndex(elements: test.newElements)
|
|
c.replaceSubrange(rangeToReplace, with: newElements)
|
|
expectEqualSequence(
|
|
closedExpected,
|
|
c.map { $0.value },
|
|
stackTrace: SourceLocStack().with(test.loc))
|
|
}
|
|
}
|
|
|
|
% withRangeTypes = ["range", "closedRange"]
|
|
% for rangeType in withRangeTypes:
|
|
RangeReplaceableTestSuite.test("removeSubrange/${rangeType}") {
|
|
% if rangeType is "closedRange":
|
|
for test in removeRangeTests.filter({ !$0.rangeSelection.isEmpty }) {
|
|
% else:
|
|
for test in removeRangeTests {
|
|
% end
|
|
var c =
|
|
MinimalRangeReplaceableRandomAccessCollectionWithStrideableIndex(elements: test.collection)
|
|
let rangeToRemove = test.rangeSelection.${rangeType}(in: c)
|
|
c.removeSubrange(rangeToRemove)
|
|
expectEqualSequence(
|
|
test.expected,
|
|
c.map { $0.value },
|
|
stackTrace: SourceLocStack().with(test.loc))
|
|
}
|
|
}
|
|
% end
|
|
|
|
RangeReplaceableTestSuite.test("reserveCapacity/dispatch") {
|
|
var tester = RangeReplaceableCollectionLog.dispatchTester(Array<Int>())
|
|
tester.reserveCapacity(10)
|
|
expectCustomizable(tester, tester.log.reserveCapacity)
|
|
}
|
|
|
|
runAllTests()
|
|
|