Skip to content

Commit 859e4bb

Browse files
author
Tim Vermeulen
committed
Replace validateIndexTraversals test method with IndexValidator type
1 parent 5289974 commit 859e4bb

12 files changed

+374
-159
lines changed

Sources/Algorithms/Split.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//===----------------------------------------------------------------------===//
1313
// SplitSequence
1414
//===----------------------------------------------------------------------===//
15+
1516
/// A sequence that lazily splits a base sequence into subsequences separated by
1617
/// elements that satisfy the given `whereSeparator` predicate.
1718
///
@@ -335,6 +336,7 @@ extension LazySequenceProtocol where Element: Equatable {
335336
//===----------------------------------------------------------------------===//
336337
// SplitCollection
337338
//===----------------------------------------------------------------------===//
339+
338340
/// A collection that lazily splits a base collection into subsequences
339341
/// separated by elements that satisfy the given `whereSeparator` predicate.
340342
///

Tests/SwiftAlgorithmsTests/AdjacentPairsTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ final class AdjacentPairsTests: XCTestCase {
7070
}
7171

7272
func testIndexTraversals() {
73-
validateIndexTraversals(
74-
(0..<0).adjacentPairs(),
75-
(0..<1).adjacentPairs(),
76-
(0..<2).adjacentPairs(),
77-
(0..<5).adjacentPairs())
73+
let validator = IndexValidator<AdjacentPairsCollection<Range<Int>>>()
74+
validator.validate((0..<0).adjacentPairs(), expectedCount: 0)
75+
validator.validate((0..<1).adjacentPairs(), expectedCount: 0)
76+
validator.validate((0..<2).adjacentPairs(), expectedCount: 1)
77+
validator.validate((0..<5).adjacentPairs(), expectedCount: 4)
7878
}
7979

8080
func testLaziness() {

Tests/SwiftAlgorithmsTests/ChainTests.swift

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,17 @@ final class ChainTests: XCTestCase {
3636
}
3737

3838
func testChainIndexTraversals() {
39-
validateIndexTraversals(
40-
chain("abcd", "XYZ"),
41-
chain("abcd", ""),
42-
chain("", "XYZ"),
43-
chain("", ""),
44-
indices: { chain in
39+
let validator = IndexValidator<Chain2Sequence<String, String>>(
40+
indicesIncludingEnd: { chain in
4541
chain.base1.indices.map { .init(first: $0) }
4642
+ chain.base2.indices.map { .init(second: $0) }
4743
+ [.init(second: chain.base2.endIndex)]
4844
})
45+
46+
validator.validate(chain("abcd", "XYZ"), expectedCount: 4 + 3)
47+
validator.validate(chain("abcd", ""), expectedCount: 4 + 0)
48+
validator.validate(chain("", "XYZ"), expectedCount: 0 + 3)
49+
validator.validate(chain("", ""), expectedCount: 0 + 0)
4950
}
5051

5152
func testChainIndexOffsetAcrossBoundary() {

Tests/SwiftAlgorithmsTests/ChunkedTests.swift

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,15 @@ final class ChunkedTests: XCTestCase {
6767

6868
let lazyChunks = fruits.lazy.chunked(on: { $0.first })
6969
validateFruitChunks(lazyChunks.map { $1 })
70-
validateIndexTraversals(lazyChunks)
70+
IndexValidator().validate(lazyChunks)
7171
}
7272

7373
func testChunkedBy() {
7474
validateFruitChunks(fruits.chunked(by: { $0.first == $1.first }))
7575

7676
let lazyChunks = fruits.lazy.chunked(by: { $0.first == $1.first })
7777
validateFruitChunks(lazyChunks)
78-
validateIndexTraversals(lazyChunks)
78+
IndexValidator().validate(lazyChunks)
7979
}
8080

8181
func testChunkedByComparesConsecutiveElements() {
@@ -94,7 +94,7 @@ final class ChunkedTests: XCTestCase {
9494
[1, 2, 3, 4, 6, 7, 8, 9].lazy.chunked(by: { $1 - $0 == 1 }).reversed(),
9595
[[6, 7, 8, 9], [1, 2, 3, 4]])
9696

97-
validateIndexTraversals([1, 2, 3].lazy.chunked(by: { $1 - $0 == 1 }))
97+
IndexValidator().validate([1, 2, 3].lazy.chunked(by: { $1 - $0 == 1 }))
9898
}
9999

100100
func testChunkedLazy() {
@@ -159,15 +159,18 @@ final class ChunkedTests: XCTestCase {
159159
func testEmptyChunksOfCountTraversal() {
160160
let emptyChunks = [Int]().chunks(ofCount: 1)
161161

162-
validateIndexTraversals(emptyChunks)
162+
IndexValidator().validate(emptyChunks, expectedCount: 0)
163163
}
164164

165165
func testChunksOfCountTraversal() {
166-
for i in 1..<10 {
167-
let collection = (1...50).map { $0 }
168-
let chunks = collection.chunks(ofCount: i)
169-
170-
validateIndexTraversals(chunks)
166+
let validator = IndexValidator<ChunksOfCountCollection<ClosedRange<Int>>>()
167+
168+
for i in 1...10 {
169+
let range = 1...50
170+
let chunks = range.chunks(ofCount: i)
171+
validator.validate(
172+
chunks,
173+
expectedCount: range.count / i + (range.count % i).signum())
171174
}
172175
}
173176
}

Tests/SwiftAlgorithmsTests/CompactedTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ final class CompactedTests: XCTestCase {
3737
}
3838

3939
func testCollectionTraversals() {
40+
let validator = IndexValidator<CompactedCollection<[Int?], Int>>()
4041
for array in self.tests {
41-
validateIndexTraversals(array.compacted())
42+
validator.validate(array.compacted())
4243
}
4344
}
4445
}

Tests/SwiftAlgorithmsTests/IntersperseTests.swift

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,21 @@ final class IntersperseTests: XCTestCase {
2626
func testString() {
2727
let interspersed = "ABCDE".interspersed(with: "-")
2828
XCTAssertEqualSequences(interspersed, "A-B-C-D-E")
29-
validateIndexTraversals(interspersed)
3029
}
3130

3231
func testStringEmpty() {
3332
let interspersed = "".interspersed(with: "-")
3433
XCTAssertEqualSequences(interspersed, "")
35-
validateIndexTraversals(interspersed)
3634
}
3735

3836
func testArray() {
3937
let interspersed = [1,2,3,4].interspersed(with: 0)
4038
XCTAssertEqualSequences(interspersed, [1,0,2,0,3,0,4])
41-
validateIndexTraversals(interspersed)
4239
}
4340

4441
func testArrayEmpty() {
4542
let interspersed = [].interspersed(with: 0)
4643
XCTAssertEqualSequences(interspersed, [])
47-
validateIndexTraversals(interspersed)
4844
}
4945

5046
func testCollection() {
@@ -55,7 +51,14 @@ final class IntersperseTests: XCTestCase {
5551
func testBidirectionalCollection() {
5652
let reversed = "ABCDE".interspersed(with: "-").reversed()
5753
XCTAssertEqualSequences(reversed, "E-D-C-B-A")
58-
validateIndexTraversals(reversed)
54+
}
55+
56+
func testIndexTraversals() {
57+
let validator = IndexValidator<InterspersedSequence<String>>()
58+
validator.validate("".interspersed(with: "-"), expectedCount: 0)
59+
validator.validate("A".interspersed(with: "-"), expectedCount: 1)
60+
validator.validate("AB".interspersed(with: "-"), expectedCount: 3)
61+
validator.validate("ABCDE".interspersed(with: "-"), expectedCount: 9)
5962
}
6063

6164
func testIntersperseLazy() {
@@ -83,10 +86,18 @@ final class IntersperseTests: XCTestCase {
8386
}
8487

8588
func testInterspersedMapIndexTraversals() {
86-
validateIndexTraversals(
87-
(0..<0).lazy.interspersedMap({ $0 }, with: { _, _ in 100 }),
88-
(0..<1).lazy.interspersedMap({ $0 }, with: { _, _ in 100 }),
89-
(0..<2).lazy.interspersedMap({ $0 }, with: { _, _ in 100 }),
90-
(0..<5).lazy.interspersedMap({ $0 }, with: { _, _ in 100 }))
89+
let validator = IndexValidator<InterspersedMapSequence<Range<Int>, Int>>()
90+
validator.validate(
91+
(0..<0).lazy.interspersedMap({ $0 }, with: {_, _ in 100 }),
92+
expectedCount: 0)
93+
validator.validate(
94+
(0..<1).lazy.interspersedMap({ $0 }, with: {_, _ in 100 }),
95+
expectedCount: 1)
96+
validator.validate(
97+
(0..<2).lazy.interspersedMap({ $0 }, with: {_, _ in 100 }),
98+
expectedCount: 3)
99+
validator.validate(
100+
(0..<5).lazy.interspersedMap({ $0 }, with: {_, _ in 100 }),
101+
expectedCount: 9)
91102
}
92103
}

Tests/SwiftAlgorithmsTests/JoinedTests.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,22 @@ final class JoinedTests: XCTestCase {
111111
}
112112

113113
func testJoinedIndexTraversals() {
114+
let validator = IndexValidator<FlattenCollection<[String]>>()
115+
114116
// the last test case takes too long to run
115117
for strings in stringArrays.dropLast() {
116-
validateIndexTraversals(strings.joined() as FlattenCollection)
117-
validateIndexTraversals(strings.joined(by: ", "))
118+
validator.validate(strings.joined() as FlattenCollection)
118119
}
120+
}
121+
122+
func testJoinedByIndexTraversals() {
123+
let validator1 = IndexValidator<JoinedByCollection<[String], String>>()
124+
let validator2 = IndexValidator<JoinedByClosureCollection<[String], String>>()
119125

126+
// the last test case takes too long to run
120127
for (strings, separator) in product(stringArrays.dropLast(), ["", " ", ", "]) {
121-
validateIndexTraversals(strings.joined(by: separator))
122-
validateIndexTraversals(strings.lazy.joined(by: { _, _ in separator }))
128+
validator1.validate(strings.joined(by: separator))
129+
validator2.validate(strings.lazy.joined(by: { _, _ in separator }))
123130
}
124131
}
125132
}

Tests/SwiftAlgorithmsTests/ProductTests.swift

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,18 @@ final class ProductTests: XCTestCase {
3939
}
4040

4141
func testProductIndexTraversals() {
42-
validateIndexTraversals(
43-
product([1, 2, 3, 4], "abc"),
44-
product([1, 2, 3, 4], ""),
45-
product([], "abc"),
46-
product([], ""),
47-
indices: { product in
42+
let validator = IndexValidator<Product2Sequence<[Int], String>>(
43+
indicesIncludingEnd: { product in
4844
product.base1.indices.flatMap { i1 in
4945
product.base2.indices.map { i2 in
5046
.init(i1: i1, i2: i2)
5147
}
5248
} + [.init(i1: product.base1.endIndex, i2: product.base2.startIndex)]
5349
})
50+
51+
validator.validate(product([1, 2, 3, 4], "abc"), expectedCount: 4 * 3)
52+
validator.validate(product([1, 2, 3, 4], ""), expectedCount: 4 * 0)
53+
validator.validate(product([], "abc"), expectedCount: 0 * 3)
54+
validator.validate(product([], ""), expectedCount: 0 * 0)
5455
}
5556
}

Tests/SwiftAlgorithmsTests/ReductionsTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@ final class ReductionsTests: XCTestCase {
5151
XCTAssertNoThrow(try [].reductions(0) { _, _ in throw TestError() })
5252
XCTAssertThrowsError(try [1].reductions(0) { _, _ in throw TestError() })
5353
}
54+
55+
func testExclusiveIndexTraversals() {
56+
let validator = IndexValidator<ExclusiveReductionsSequence<Range<Int>, Int>>()
57+
validator.validate((0..<0).lazy.reductions(0, +), expectedCount: 1)
58+
validator.validate((0..<1).lazy.reductions(0, +), expectedCount: 2)
59+
validator.validate((0..<4).lazy.reductions(0, +), expectedCount: 5)
60+
}
5461

5562
// MARK: - Inclusive Reductions
5663

@@ -77,4 +84,11 @@ final class ReductionsTests: XCTestCase {
7784
XCTAssertNoThrow(try [1].reductions { _, _ in throw TestError() })
7885
XCTAssertThrowsError(try [1, 1].reductions { _, _ in throw TestError() })
7986
}
87+
88+
func testInclusiveIndexTraversals() {
89+
let validator = IndexValidator<InclusiveReductionsSequence<Range<Int>>>()
90+
validator.validate((0..<0).lazy.reductions(+), expectedCount: 0)
91+
validator.validate((0..<1).lazy.reductions(+), expectedCount: 1)
92+
validator.validate((0..<4).lazy.reductions(+), expectedCount: 4)
93+
}
8094
}

Tests/SwiftAlgorithmsTests/StrideTests.swift

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -88,29 +88,36 @@ final class StridingTests: XCTestCase {
8888
}
8989

9090
func testIndexTraversals() {
91-
let empty = [Int]()
92-
validateIndexTraversals(
93-
empty.striding(by: 1),
94-
empty.striding(by: 2)
95-
)
96-
let zero_to_one_hundered_range = 0...100
97-
validateIndexTraversals(
98-
zero_to_one_hundered_range.striding(by: 10),
99-
zero_to_one_hundered_range.striding(by: 11),
100-
zero_to_one_hundered_range.striding(by: 101)
101-
)
102-
let zero_to_one_hundered_array = Array(zero_to_one_hundered_range)
103-
validateIndexTraversals(
104-
zero_to_one_hundered_array.striding(by: 10),
105-
zero_to_one_hundered_array.striding(by: 11),
106-
zero_to_one_hundered_array.striding(by: 101)
107-
)
108-
let string = "swift rocks".map(String.init)
109-
validateIndexTraversals(
110-
string.striding(by: 1),
111-
string.striding(by: 2),
112-
string.striding(by: 10)
113-
)
91+
do {
92+
let empty = [Int]()
93+
let validator = IndexValidator<StridingCollection<[Int]>>()
94+
validator.validate(empty.striding(by: 1))
95+
validator.validate(empty.striding(by: 2))
96+
}
97+
98+
do {
99+
let range = 0...100
100+
let validator = IndexValidator<StridingCollection<ClosedRange<Int>>>()
101+
validator.validate(range.striding(by: 10))
102+
validator.validate(range.striding(by: 11))
103+
validator.validate(range.striding(by: 101))
104+
}
105+
106+
do {
107+
let array = Array(0...100)
108+
let validator = IndexValidator<StridingCollection<[Int]>>()
109+
validator.validate(array.striding(by: 10))
110+
validator.validate(array.striding(by: 11))
111+
validator.validate(array.striding(by: 101))
112+
}
113+
114+
do {
115+
let string = "swift rocks"
116+
let validator = IndexValidator<StridingCollection<String>>()
117+
validator.validate(string.striding(by: 1))
118+
validator.validate(string.striding(by: 2))
119+
validator.validate(string.striding(by: 10))
120+
}
114121
}
115122

116123

0 commit comments

Comments
 (0)