@@ -31,6 +31,8 @@ class TestNSArray : XCTestCase {
31
31
( " test_binarySearch " , test_binarySearch) ,
32
32
( " test_replaceObjectsInRange_withObjectsFromArray " , test_replaceObjectsInRange_withObjectsFromArray) ,
33
33
( " test_replaceObjectsInRange_withObjectsFromArray_range " , test_replaceObjectsInRange_withObjectsFromArray_range) ,
34
+ ( " test_sortedArrayUsingComparator " , test_sortedArrayUsingComparator) ,
35
+ ( " test_sortedArrayWithOptionsUsingComparator " , test_sortedArrayWithOptionsUsingComparator)
34
36
]
35
37
}
36
38
@@ -198,4 +200,47 @@ class TestNSArray : XCTestCase {
198
200
XCTAssertEqual ( array1 [ 2 ] as? NSString , " baz2 " . bridge ( ) , " Expected baz2 but was \( array1 [ 2 ] ) " )
199
201
XCTAssertEqual ( array1 [ 3 ] as? NSString , " baz1 " . bridge ( ) , " Expected baz1 but was \( array1 [ 3 ] ) " )
200
202
}
203
+
204
+ func test_sortedArrayUsingComparator( ) {
205
+ // sort with localized caseInsensitive compare
206
+ let input = [ " this " , " is " , " a " , " test " , " of " , " sort " , " with " , " strings " ]
207
+ let expectedResult : Array < String > = input. sort ( )
208
+ let result = input. bridge ( ) . sortedArrayUsingComparator { left, right -> NSComparisonResult in
209
+ let l = left as! NSString
210
+ let r = right as! NSString
211
+ return l. localizedCaseInsensitiveCompare ( r. bridge ( ) )
212
+ } as! [ NSString ]
213
+ XCTAssertEqual ( result. map { $0. bridge ( ) } , expectedResult)
214
+
215
+ // sort empty array
216
+ let emptyArray = NSArray ( ) . sortedArrayUsingComparator { _, _ in . OrderedSame }
217
+ XCTAssertTrue ( emptyArray. isEmpty)
218
+
219
+ // sort numbers
220
+ let inputNumbers = [ 0 , 10 , 25 , 100 , 21 , 22 ]
221
+ let expectedNumbers = inputNumbers. sort ( )
222
+ let resultNumbers = inputNumbers. bridge ( ) . sortedArrayUsingComparator { left, right -> NSComparisonResult in
223
+ let l = ( left as! NSNumber ) . integerValue
224
+ let r = ( right as! NSNumber ) . integerValue
225
+ return l < r ? . OrderedAscending : ( l > r ? . OrderedSame : . OrderedDescending)
226
+ } as! [ NSNumber ]
227
+ XCTAssertEqual ( resultNumbers. map { $0. integerValue} , expectedNumbers)
228
+ }
229
+
230
+ func test_sortedArrayWithOptionsUsingComparator( ) {
231
+ // check that sortedArrayWithOptions:comparator: works in the way sortedArrayUsingComparator does
232
+ let input = [ " this " , " is " , " a " , " test " , " of " , " sort " , " with " , " strings " ] . bridge ( )
233
+ let comparator : ( AnyObject , AnyObject ) -> NSComparisonResult = { left, right -> NSComparisonResult in
234
+ let l = left as! NSString
235
+ let r = right as! NSString
236
+ return l. localizedCaseInsensitiveCompare ( r. bridge ( ) )
237
+ }
238
+ let result1 = input. sortedArrayUsingComparator ( comparator) as! [ NSString ]
239
+ let result2 = input. sortedArrayWithOptions ( [ ] , usingComparator: comparator) as! [ NSString ]
240
+ XCTAssertEqual ( result1, result2)
241
+
242
+ // sort empty array
243
+ let emptyArray = NSArray ( ) . sortedArrayWithOptions ( [ ] ) { _, _ in . OrderedSame }
244
+ XCTAssertTrue ( emptyArray. isEmpty)
245
+ }
201
246
}
0 commit comments