Skip to content

Commit e13b9e5

Browse files
committed
Add tests for range-based permutations(ofCount:)
1 parent b57493c commit e13b9e5

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

Tests/SwiftAlgorithmsTests/PermutationsTests.swift

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,58 @@ final class PermutationsTests: XCTestCase {
2626
XCTAssertTrue(p.allSatisfy { $0.count == count })
2727
XCTAssertTrue(p.isSorted(by: { $0.lexicographicallyPrecedes($1) }))
2828
}
29-
29+
30+
func ts<R: RangeExpression>(count: R) where R.Bound == Int {
31+
let p = count.relative(to: 0 ..< .max)
32+
.clamped(to: 0 ..< c.count + 1)
33+
.flatMap {
34+
c.permutations(ofCount: $0)
35+
}
36+
37+
let p2 = c.permutations(ofCount: count)
38+
39+
XCTAssertEqual(p.count, p2.count)
40+
XCTAssertEqualSequences(p, Array(p2))
41+
}
42+
43+
t(count: 0)
3044
t(count: 1)
3145
t(count: 2)
3246
t(count: 3)
3347
t(count: 4)
3448
t(count: 5)
3549
t(count: nil)
50+
51+
ts(count: 0...0)
52+
ts(count: 1...1)
53+
ts(count: 0...1)
54+
ts(count: 0...2)
55+
ts(count: 0...3)
56+
ts(count: 1...3)
57+
ts(count: 2...3)
58+
ts(count: 0...)
59+
ts(count: ...5)
60+
ts(count: ...4)
61+
ts(count: ...6)
3662
}
3763

3864
func testEmpty() {
3965
// `k == 0` results in one zero-length permutation
4066
XCTAssertEqual(1, "".permutations().count)
4167
XCTAssertEqual(1, "ABCD".permutations(ofCount: 0).count)
68+
XCTAssertEqual(1, "ABCD".permutations(ofCount: 0...0).count)
4269
XCTAssertEqual(Array("".permutations()), [[]])
4370
XCTAssertEqual(Array("".permutations(ofCount: 0)), [[]])
4471
XCTAssertEqual(Array("ABCD".permutations(ofCount: 0)), [[]])
72+
XCTAssertEqual(Array("ABCD".permutations(ofCount: 0...0)), [[]])
4573

4674
// `k` greater than element count results in zero permutations
4775
XCTAssertEqual(0, "".permutations(ofCount: 5).count)
4876
XCTAssertEqual(Array("".permutations(ofCount: 5)), [])
4977
XCTAssertEqual(Array("ABCD".permutations(ofCount: 5)), [])
78+
XCTAssertEqual(Array("ABCD".permutations(ofCount: 5..<6)), [])
79+
XCTAssertEqual(Array("ABCD".permutations(ofCount: 5..<7)), [])
80+
XCTAssertEqual(Array("ABCD".permutations(ofCount: 5...)), [])
5081
}
5182

5283
func testNextPermutation() {
@@ -64,7 +95,7 @@ final class PermutationsTests: XCTestCase {
6495
XCTAssertEqual([1, 2, 3, 4, 7, 6, 5], numbers)
6596
_ = numbers.nextPermutation()
6697
XCTAssertEqual([1, 2, 3, 5, 4, 6, 7], numbers)
67-
98+
6899
// Fast-forward to end of permutations.
69100
while numbers.nextPermutation() {}
70101
XCTAssertEqual([1, 2, 3, 4, 5, 6, 7], numbers)

0 commit comments

Comments
 (0)