| // -*- 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/countableRange") { |
| for test in replaceRangeTests { |
| var c = |
| MinimalRangeReplaceableRandomAccessCollectionWithStrideableIndex(elements: test.collection) |
| let rangeToReplace = test.rangeSelection.countableRange(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/countableClosedRange") { |
| for test in replaceRangeTests { |
| guard let closedExpected = test.closedExpected else { continue } |
| var c = |
| MinimalRangeReplaceableRandomAccessCollectionWithStrideableIndex(elements: test.collection) |
| let rangeToReplace = test.rangeSelection.countableClosedRange(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 = ["countableRange", "countableClosedRange"] |
| % for rangeType in withRangeTypes: |
| RangeReplaceableTestSuite.test("removeSubrange/${rangeType}") { |
| % if rangeType is "countableClosedRange": |
| 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() |
| |