@@ -26,27 +26,58 @@ final class PermutationsTests: XCTestCase {
26
26
XCTAssertTrue ( p. allSatisfy { $0. count == count } )
27
27
XCTAssertTrue ( p. isSorted ( by: { $0. lexicographicallyPrecedes ( $1) } ) )
28
28
}
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 )
30
44
t ( count: 1 )
31
45
t ( count: 2 )
32
46
t ( count: 3 )
33
47
t ( count: 4 )
34
48
t ( count: 5 )
35
49
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 )
36
62
}
37
63
38
64
func testEmpty( ) {
39
65
// `k == 0` results in one zero-length permutation
40
66
XCTAssertEqual ( 1 , " " . permutations ( ) . count)
41
67
XCTAssertEqual ( 1 , " ABCD " . permutations ( ofCount: 0 ) . count)
68
+ XCTAssertEqual ( 1 , " ABCD " . permutations ( ofCount: 0 ... 0 ) . count)
42
69
XCTAssertEqual ( Array ( " " . permutations ( ) ) , [ [ ] ] )
43
70
XCTAssertEqual ( Array ( " " . permutations ( ofCount: 0 ) ) , [ [ ] ] )
44
71
XCTAssertEqual ( Array ( " ABCD " . permutations ( ofCount: 0 ) ) , [ [ ] ] )
72
+ XCTAssertEqual ( Array ( " ABCD " . permutations ( ofCount: 0 ... 0 ) ) , [ [ ] ] )
45
73
46
74
// `k` greater than element count results in zero permutations
47
75
XCTAssertEqual ( 0 , " " . permutations ( ofCount: 5 ) . count)
48
76
XCTAssertEqual ( Array ( " " . permutations ( ofCount: 5 ) ) , [ ] )
49
77
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 ... ) ) , [ ] )
50
81
}
51
82
52
83
func testNextPermutation( ) {
@@ -64,7 +95,7 @@ final class PermutationsTests: XCTestCase {
64
95
XCTAssertEqual ( [ 1 , 2 , 3 , 4 , 7 , 6 , 5 ] , numbers)
65
96
_ = numbers. nextPermutation ( )
66
97
XCTAssertEqual ( [ 1 , 2 , 3 , 5 , 4 , 6 , 7 ] , numbers)
67
-
98
+
68
99
// Fast-forward to end of permutations.
69
100
while numbers. nextPermutation ( ) { }
70
101
XCTAssertEqual ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ] , numbers)
0 commit comments