@@ -36,6 +36,8 @@ class TestNSArray : XCTestCase {
36
36
( " test_sortedArrayWithOptionsUsingComparator " , test_sortedArrayWithOptionsUsingComparator) ,
37
37
( " test_arrayReplacement " , test_arrayReplacement) ,
38
38
( " test_arrayReplaceObjectsInRangeFromRange " , test_arrayReplaceObjectsInRangeFromRange) ,
39
+ ( " test_sortUsingFunction " , test_sortUsingFunction) ,
40
+ ( " test_sortUsingComparator " , test_sortUsingComparator)
39
41
]
40
42
}
41
43
@@ -302,4 +304,48 @@ class TestNSArray : XCTestCase {
302
304
let emptyArray = NSArray ( ) . sortedArrayWithOptions ( [ ] ) { _, _ in . OrderedSame }
303
305
XCTAssertTrue ( emptyArray. isEmpty)
304
306
}
307
+
308
+ func test_sortUsingFunction( ) {
309
+ let inputNumbers = [ 11 , 120 , 215 , 11 , 1 , - 22 , 35 , - 89 , 65 ]
310
+ let mutableInput = inputNumbers. bridge ( ) . mutableCopy ( ) as! NSMutableArray
311
+ let expectedNumbers = inputNumbers. sort ( )
312
+
313
+ func compare( left: AnyObject , right: AnyObject , context: UnsafeMutablePointer < Void > ) -> Int {
314
+ let l = ( left as! NSNumber ) . integerValue
315
+ let r = ( right as! NSNumber ) . integerValue
316
+ return l < r ? - 1 : ( l > r ? 0 : 1 )
317
+ }
318
+ mutableInput. sortUsingFunction ( compare, context: UnsafeMutablePointer < Void > ( bitPattern: 0 ) )
319
+
320
+ XCTAssertEqual ( mutableInput. map { ( $0 as! NSNumber ) . integerValue} , expectedNumbers)
321
+ }
322
+
323
+ func test_sortUsingComparator( ) {
324
+ // check behaviour with Array's sort method
325
+ let inputNumbers = [ 11 , 120 , 215 , 11 , 1 , - 22 , 35 , - 89 , 65 ]
326
+ let mutableInput = inputNumbers. bridge ( ) . mutableCopy ( ) as! NSMutableArray
327
+ let expectedNumbers = inputNumbers. sort ( )
328
+
329
+ mutableInput. sortUsingComparator { left, right -> NSComparisonResult in
330
+ let l = ( left as! NSNumber ) . integerValue
331
+ let r = ( right as! NSNumber ) . integerValue
332
+ return l < r ? . OrderedAscending : ( l > r ? . OrderedSame : . OrderedDescending)
333
+ }
334
+
335
+ XCTAssertEqual ( mutableInput. map { ( $0 as! NSNumber ) . integerValue} , expectedNumbers) ;
336
+
337
+ // check that it works in the way self.sortWithOptions([], usingComparator: cmptr) does
338
+ let inputStrings = [ " this " , " is " , " a " , " test " , " of " , " sort " , " with " , " strings " ]
339
+ let mutableStringsInput1 = inputStrings. bridge ( ) . mutableCopy ( ) as! NSMutableArray
340
+ let mutableStringsInput2 = inputStrings. bridge ( ) . mutableCopy ( ) as! NSMutableArray
341
+ let comparator : ( AnyObject , AnyObject ) -> NSComparisonResult = { left, right -> NSComparisonResult in
342
+ let l = left as! NSString
343
+ let r = right as! NSString
344
+ return l. localizedCaseInsensitiveCompare ( r. bridge ( ) )
345
+ }
346
+ mutableStringsInput1. sortUsingComparator ( comparator)
347
+ mutableStringsInput2. sortWithOptions ( [ ] , usingComparator: comparator)
348
+ XCTAssertTrue ( mutableStringsInput1. isEqualToArray ( mutableStringsInput2. bridge ( ) ) )
349
+ }
350
+
305
351
}
0 commit comments