@@ -64,14 +64,17 @@ final class PartitionTests: XCTestCase {
64
64
func testStablePartitionWithSubrange( ) {
65
65
for length in 10 ... 20 {
66
66
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
+ }
75
78
}
76
79
}
77
80
}
@@ -88,4 +91,46 @@ final class PartitionTests: XCTestCase {
88
91
}
89
92
}
90
93
}
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
+ }
91
136
}
0 commit comments