|
10 | 10 | //===----------------------------------------------------------------------===//
|
11 | 11 |
|
12 | 12 | import XCTest
|
13 |
| -import Algorithms |
| 13 | +@testable import Algorithms |
14 | 14 |
|
15 | 15 | final class RotateTests: XCTestCase {
|
| 16 | + /// Tests the example given in `_reverse(subrange:until:)`’s documentation |
| 17 | + func testUnderscoreReverse() { |
| 18 | + var input = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"] |
| 19 | + let limit: Int = 4 |
| 20 | + let (lower, upper) = input._reverse(subrange: input.startIndex..<input.endIndex, until: input.startIndex.advanced(by: limit)) |
| 21 | + let expected = ["p", "o", "n", "m", "e", "f", "g", "h", "i", "j", "k", "l", "d", "c", "b", "a"] |
| 22 | + XCTAssertEqual(input, expected) |
| 23 | + XCTAssertEqual(lower, input.startIndex.advanced(by: limit)) |
| 24 | + XCTAssertEqual(upper, input.endIndex.advanced(by: -limit)) |
| 25 | + } |
| 26 | + |
| 27 | + /// Tests the example given in `reverse(subrange:)`’s documentation |
| 28 | + func testReverse() { |
| 29 | + var numbers = [10, 20, 30, 40, 50, 60, 70, 80] |
| 30 | + numbers.reverse(subrange: 0..<4) |
| 31 | + XCTAssertEqual(numbers, [40, 30, 20, 10, 50, 60, 70, 80]) |
| 32 | + } |
| 33 | + |
| 34 | + /// Tests `rotate(subrange:toStartAt:)` with an empty subrange |
| 35 | + /// The order of elements are unchanged |
| 36 | + func testRotateEmptySubrange() { |
| 37 | + var numbers = [10, 20, 30, 40, 50, 60, 70, 80] |
| 38 | + let oldStart = numbers.rotate(subrange: 3..<3, toStartAt: 3) |
| 39 | + XCTAssertEqual(numbers, [10, 20, 30, 40, 50, 60, 70, 80]) |
| 40 | + XCTAssertEqual(numbers[oldStart], 40) |
| 41 | + } |
| 42 | + |
| 43 | + /// Tests `rotate(subrange:toStartAt:)` with an empty collection |
| 44 | + func testRotateSubrangeOnEmptyCollection() { |
| 45 | + var numbers = [Int]() |
| 46 | + let oldStart = numbers.rotate(subrange: 0..<0, toStartAt: 0) |
| 47 | + XCTAssertEqual(numbers, []) |
| 48 | + XCTAssertEqual(oldStart, numbers.startIndex) |
| 49 | + } |
| 50 | + |
| 51 | + /// Tests `rotate(subrange:toStartAt:)` with the full range of the collection |
| 52 | + func testRotateFullRange() { |
| 53 | + var numbers = [10, 20, 30, 40, 50, 60, 70, 80] |
| 54 | + let oldStart = numbers.rotate(subrange: 0..<8, toStartAt: 1) |
| 55 | + XCTAssertEqual(numbers, [20, 30, 40, 50, 60, 70, 80, 10]) |
| 56 | + XCTAssertEqual(numbers[oldStart], 10) |
| 57 | + } |
| 58 | + |
| 59 | + /// Tests the example given in `rotate(subrange:toStartAt:)`’s documentation |
| 60 | + func testRotateSubrange() { |
| 61 | + var numbers = [10, 20, 30, 40, 50, 60, 70, 80] |
| 62 | + let oldStart = numbers.rotate(subrange: 0..<4, toStartAt: 2) |
| 63 | + XCTAssertEqual(numbers, [30, 40, 10, 20, 50, 60, 70, 80]) |
| 64 | + XCTAssertEqual(numbers[oldStart], 10) |
| 65 | + } |
| 66 | + |
| 67 | + /// Tests the example given in `rotate(toStartAt:)`’s documentation |
| 68 | + func testRotateExample() { |
| 69 | + var numbers = [10, 20, 30, 40, 50, 60, 70, 80] |
| 70 | + let oldStart = numbers.rotate(toStartAt: 3) |
| 71 | + XCTAssertEqual(numbers, [40, 50, 60, 70, 80, 10, 20, 30]) |
| 72 | + XCTAssertEqual(numbers[oldStart], 10) |
| 73 | + } |
| 74 | + |
| 75 | + /// Tests `rotate(toStartAt:)` on collections of varying lengths, at different |
| 76 | + /// starting points |
16 | 77 | func testRotate() {
|
17 | 78 | for length in 0...15 {
|
18 | 79 | let a = Array(0..<length)
|
|
0 commit comments