@@ -64,14 +64,17 @@ final class PartitionTests: XCTestCase {
6464 func testStablePartitionWithSubrange( ) {
6565 for length in 10 ... 20 {
6666 let a = Array ( 0 ..< length)
67- for j in 0 ..< length {
68- var b = a
69- let partitionRange = 0 ..< j
70- let condition = { $0 < j - 1 }
71- let p = b. stablePartition ( subrange: partitionRange, by: condition)
72- XCTAssertEqual ( p, partitionRange. count > 0 ? 1 : 0 )
73- XCTAssertEqualSequences ( b [ partitionRange. lowerBound..< p] , a [ partitionRange] . filter { !condition( $0) } )
74- XCTAssertEqualSequences ( b [ p..< partitionRange. upperBound] , a [ partitionRange] . filter ( condition) )
67+ for i in 0 ..< length {
68+ for j in 0 ... i {
69+ var b = a
70+ let partitionRange = j..< i
71+ let condition = { $0 < i - 1 }
72+ let p = b. stablePartition ( subrange: partitionRange, by: condition)
73+
74+ XCTAssertEqual ( p, partitionRange. count == 0 ? j : j + 1 )
75+ XCTAssertEqualSequences ( b [ partitionRange. lowerBound..< p] , a [ partitionRange] . filter { !condition( $0) } )
76+ XCTAssertEqualSequences ( b [ p..< partitionRange. upperBound] , a [ partitionRange] . filter ( condition) )
77+ }
7578 }
7679 }
7780 }
@@ -88,4 +91,46 @@ final class PartitionTests: XCTestCase {
8891 }
8992 }
9093 }
94+
95+ func testPartitionWithSubrangeBidirectionalCollection( ) {
96+ for length in 10 ... 20 {
97+ let a = Array ( 0 ..< length)
98+ for i in 0 ..< length {
99+ for j in 0 ... i {
100+ var b = a
101+ let partitionRange = j..< i
102+ let condition = { $0 < i - 1 }
103+ let p = b. partition ( subrange: partitionRange, by: condition)
104+
105+ XCTAssertEqual ( p, partitionRange. count == 0 ? j : j + 1 )
106+ XCTAssertEqualSequences ( b [ partitionRange. lowerBound..< p] , a [ partitionRange] . filter { !condition( $0) } )
107+ XCTAssertUnorderedEqualSequences ( b [ p..< partitionRange. upperBound] , a [ partitionRange] . filter ( condition) )
108+ }
109+ }
110+ }
111+ }
112+
113+ func testPartitionWithSubrangeMutableCollection( ) {
114+ for length in 10 ... 20 {
115+ let a = Array ( 0 ..< length)
116+ for i in 0 ..< length {
117+ for j in 0 ... i {
118+ var b = a. eraseToAnyMutableCollection ( )
119+ var bdc = a
120+ let partitionRange = j..< i
121+ let condition = { $0 < i - 1 }
122+ let p = b. partition ( subrange: partitionRange, by: condition)
123+ let bdcp = bdc. partition ( subrange: partitionRange, by: condition)
124+
125+ XCTAssertEqual ( p, partitionRange. count == 0 ? j : j + 1 )
126+ XCTAssertEqualSequences ( b [ partitionRange. lowerBound..< p] , a [ partitionRange] . filter { !condition( $0) } )
127+ XCTAssertUnorderedEqualSequences ( b [ p..< partitionRange. upperBound] , a [ partitionRange] . filter ( condition) )
128+
129+ // Must produce the same result as the `BidirectionalCollection` specialized overload.
130+ XCTAssertEqualSequences ( b [ partitionRange. lowerBound..< p] , bdc [ partitionRange. lowerBound..< bdcp] )
131+ XCTAssertUnorderedEqualSequences ( b [ p..< partitionRange. upperBound] , bdc [ bdcp..< partitionRange. upperBound] )
132+ }
133+ }
134+ }
135+ }
91136}
0 commit comments