Skip to content

Commit 9236298

Browse files
committed
Merge pull request #161 from briancroom/nsnumber-compare
Implement NSNumber.compare
2 parents 877a052 + 84f57d7 commit 9236298

File tree

3 files changed

+124
-2
lines changed

3 files changed

+124
-2
lines changed

Foundation/NSDecimalNumber.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public class NSDecimalNumber : NSNumber {
8484
public func decimalNumberByRoundingAccordingToBehavior(behavior: NSDecimalNumberBehaviors?) -> NSDecimalNumber { NSUnimplemented() }
8585
// Round to the scale of the behavior.
8686

87-
public func compare(decimalNumber: NSNumber) -> NSComparisonResult { NSUnimplemented() }
87+
public override func compare(decimalNumber: NSNumber) -> NSComparisonResult { NSUnimplemented() }
8888
// compare two NSDecimalNumbers
8989

9090
public class func setDefaultBehavior(behavior: NSDecimalNumberBehaviors) { NSUnimplemented() }

Foundation/NSNumber.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,10 @@ public class NSNumber : NSValue {
381381
public required convenience init(booleanLiteral value: Bool) {
382382
self.init(bool: value)
383383
}
384+
385+
public func compare(otherNumber: NSNumber) -> NSComparisonResult {
386+
return ._fromCF(CFNumberCompare(_cfObject, otherNumber._cfObject, nil))
387+
}
384388

385389
override internal var _cfTypeID: CFTypeID {
386390
return CFNumberGetTypeID()

TestFoundation/TestNSNumber.swift

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ class TestNSNumber : XCTestCase {
2626
("test_numberWithShort", test_numberWithShort ),
2727
("test_numberWithFloat", test_numberWithFloat ),
2828
("test_numberWithDouble", test_numberWithDouble ),
29+
("test_compareNumberWithBool", test_compareNumberWithBool ),
30+
("test_compareNumberWithChar", test_compareNumberWithChar ),
31+
("test_compareNumberWithUnsignedChar", test_compareNumberWithUnsignedChar ),
32+
("test_compareNumberWithShort", test_compareNumberWithShort ),
33+
("test_compareNumberWithFloat", test_compareNumberWithFloat ),
34+
("test_compareNumberWithDouble", test_compareNumberWithDouble ),
2935
]
3036
}
3137

@@ -246,4 +252,116 @@ class TestNSNumber : XCTestCase {
246252
XCTAssertEqual(NSNumber(double: Double(-37.5)).doubleValue, Double(-37.5))
247253
XCTAssertEqual(NSNumber(double: Double(42.1)).doubleValue, Double(42.1))
248254
}
249-
}
255+
256+
func test_compareNumberWithBool() {
257+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(bool: true)), NSComparisonResult.OrderedSame)
258+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(bool: false)), NSComparisonResult.OrderedDescending)
259+
XCTAssertEqual(NSNumber(bool: false).compare(NSNumber(bool: true)), NSComparisonResult.OrderedAscending)
260+
261+
XCTAssertEqual(NSNumber(bool: false).compare(NSNumber(char: 0)), NSComparisonResult.OrderedSame)
262+
XCTAssertEqual(NSNumber(bool: false).compare(NSNumber(char: -1)), NSComparisonResult.OrderedDescending)
263+
XCTAssertEqual(NSNumber(bool: false).compare(NSNumber(char: 1)), NSComparisonResult.OrderedAscending)
264+
265+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(char: 1)), NSComparisonResult.OrderedSame)
266+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(char: 0)), NSComparisonResult.OrderedDescending)
267+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(char: 2)), NSComparisonResult.OrderedAscending)
268+
269+
XCTAssertEqual(NSNumber(bool: false).compare(NSNumber(double: 0)), NSComparisonResult.OrderedSame)
270+
XCTAssertEqual(NSNumber(bool: false).compare(NSNumber(double: -0.1)), NSComparisonResult.OrderedDescending)
271+
XCTAssertEqual(NSNumber(bool: false).compare(NSNumber(double: 0.1)), NSComparisonResult.OrderedAscending)
272+
273+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(double: 1)), NSComparisonResult.OrderedSame)
274+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(double: 0.9)), NSComparisonResult.OrderedDescending)
275+
XCTAssertEqual(NSNumber(bool: true).compare(NSNumber(double: 1.1)), NSComparisonResult.OrderedAscending)
276+
}
277+
278+
func test_compareNumberWithChar() {
279+
XCTAssertEqual(NSNumber(char: 42).compare(NSNumber(char: 42)), NSComparisonResult.OrderedSame)
280+
XCTAssertEqual(NSNumber(char: 42).compare(NSNumber(char: 0)), NSComparisonResult.OrderedDescending)
281+
XCTAssertEqual(NSNumber(char: -37).compare(NSNumber(char: 16)), NSComparisonResult.OrderedAscending)
282+
283+
XCTAssertEqual(NSNumber(char: 1).compare(NSNumber(bool: true)), NSComparisonResult.OrderedSame)
284+
XCTAssertEqual(NSNumber(char: 1).compare(NSNumber(bool: false)), NSComparisonResult.OrderedDescending)
285+
XCTAssertEqual(NSNumber(char: -37).compare(NSNumber(bool: true)), NSComparisonResult.OrderedAscending)
286+
287+
XCTAssertEqual(NSNumber(char: 42).compare(NSNumber(unsignedChar: 42)), NSComparisonResult.OrderedSame)
288+
XCTAssertEqual(NSNumber(char: 42).compare(NSNumber(unsignedChar: 16)), NSComparisonResult.OrderedDescending)
289+
XCTAssertEqual(NSNumber(char: -37).compare(NSNumber(unsignedChar: 255)), NSComparisonResult.OrderedAscending)
290+
291+
XCTAssertEqual(NSNumber(char: 42).compare(NSNumber(float: 42)), NSComparisonResult.OrderedSame)
292+
XCTAssertEqual(NSNumber(char: -16).compare(NSNumber(float: -37.5)), NSComparisonResult.OrderedDescending)
293+
XCTAssertEqual(NSNumber(char: 16).compare(NSNumber(float: 16.1)), NSComparisonResult.OrderedAscending)
294+
}
295+
296+
func test_compareNumberWithUnsignedChar() {
297+
XCTAssertEqual(NSNumber(unsignedChar: 42).compare(NSNumber(unsignedChar: 42)), NSComparisonResult.OrderedSame)
298+
XCTAssertEqual(NSNumber(unsignedChar: 42).compare(NSNumber(unsignedChar: 0)), NSComparisonResult.OrderedDescending)
299+
// XCTAssertEqual(NSNumber(unsignedChar: 42).compare(NSNumber(unsignedChar: 255)), NSComparisonResult.OrderedAscending)
300+
301+
XCTAssertEqual(NSNumber(unsignedChar: 1).compare(NSNumber(bool: true)), NSComparisonResult.OrderedSame)
302+
XCTAssertEqual(NSNumber(unsignedChar: 1).compare(NSNumber(bool: false)), NSComparisonResult.OrderedDescending)
303+
XCTAssertEqual(NSNumber(unsignedChar: 0).compare(NSNumber(bool: true)), NSComparisonResult.OrderedAscending)
304+
305+
XCTAssertEqual(NSNumber(unsignedChar: 42).compare(NSNumber(short: 42)), NSComparisonResult.OrderedSame)
306+
XCTAssertEqual(NSNumber(unsignedChar: 0).compare(NSNumber(short: -123)), NSComparisonResult.OrderedDescending)
307+
XCTAssertEqual(NSNumber(unsignedChar: 255).compare(NSNumber(short: 12345)), NSComparisonResult.OrderedAscending)
308+
309+
XCTAssertEqual(NSNumber(unsignedChar: 42).compare(NSNumber(float: 42)), NSComparisonResult.OrderedSame)
310+
XCTAssertEqual(NSNumber(unsignedChar: 0).compare(NSNumber(float: -37.5)), NSComparisonResult.OrderedDescending)
311+
XCTAssertEqual(NSNumber(unsignedChar: 255).compare(NSNumber(float: 1234.5)), NSComparisonResult.OrderedAscending)
312+
}
313+
314+
func test_compareNumberWithShort() {
315+
XCTAssertEqual(NSNumber(short: 42).compare(NSNumber(short: 42)), NSComparisonResult.OrderedSame)
316+
XCTAssertEqual(NSNumber(short: 42).compare(NSNumber(short: 0)), NSComparisonResult.OrderedDescending)
317+
XCTAssertEqual(NSNumber(short: -37).compare(NSNumber(short: 12345)), NSComparisonResult.OrderedAscending)
318+
319+
XCTAssertEqual(NSNumber(short: 1).compare(NSNumber(bool: true)), NSComparisonResult.OrderedSame)
320+
XCTAssertEqual(NSNumber(short: 1).compare(NSNumber(bool: false)), NSComparisonResult.OrderedDescending)
321+
XCTAssertEqual(NSNumber(short: 0).compare(NSNumber(bool: true)), NSComparisonResult.OrderedAscending)
322+
323+
XCTAssertEqual(NSNumber(short: 42).compare(NSNumber(unsignedChar: 42)), NSComparisonResult.OrderedSame)
324+
XCTAssertEqual(NSNumber(short: 42).compare(NSNumber(unsignedChar: 0)), NSComparisonResult.OrderedDescending)
325+
XCTAssertEqual(NSNumber(short: -37).compare(NSNumber(unsignedChar: 255)), NSComparisonResult.OrderedAscending)
326+
327+
XCTAssertEqual(NSNumber(short: 42).compare(NSNumber(float: 42)), NSComparisonResult.OrderedSame)
328+
XCTAssertEqual(NSNumber(short: 0).compare(NSNumber(float: -37.5)), NSComparisonResult.OrderedDescending)
329+
XCTAssertEqual(NSNumber(short: 255).compare(NSNumber(float: 1234.5)), NSComparisonResult.OrderedAscending)
330+
}
331+
332+
func test_compareNumberWithFloat() {
333+
XCTAssertEqual(NSNumber(float: 42).compare(NSNumber(float: 42)), NSComparisonResult.OrderedSame)
334+
XCTAssertEqual(NSNumber(float: 42).compare(NSNumber(float: 0)), NSComparisonResult.OrderedDescending)
335+
XCTAssertEqual(NSNumber(float: -37).compare(NSNumber(float: 12345)), NSComparisonResult.OrderedAscending)
336+
337+
XCTAssertEqual(NSNumber(float: 1).compare(NSNumber(bool: true)), NSComparisonResult.OrderedSame)
338+
XCTAssertEqual(NSNumber(float: 0.1).compare(NSNumber(bool: false)), NSComparisonResult.OrderedDescending)
339+
XCTAssertEqual(NSNumber(float: 0.9).compare(NSNumber(bool: true)), NSComparisonResult.OrderedAscending)
340+
341+
XCTAssertEqual(NSNumber(float: 42).compare(NSNumber(unsignedChar: 42)), NSComparisonResult.OrderedSame)
342+
XCTAssertEqual(NSNumber(float: 0.1).compare(NSNumber(unsignedChar: 0)), NSComparisonResult.OrderedDescending)
343+
XCTAssertEqual(NSNumber(float: -254.9).compare(NSNumber(unsignedChar: 255)), NSComparisonResult.OrderedAscending)
344+
345+
XCTAssertEqual(NSNumber(float: 42).compare(NSNumber(double: 42)), NSComparisonResult.OrderedSame)
346+
XCTAssertEqual(NSNumber(float: 0).compare(NSNumber(double: -37.5)), NSComparisonResult.OrderedDescending)
347+
XCTAssertEqual(NSNumber(float: -37.5).compare(NSNumber(double: 1234.5)), NSComparisonResult.OrderedAscending)
348+
}
349+
350+
func test_compareNumberWithDouble() {
351+
XCTAssertEqual(NSNumber(double: 42).compare(NSNumber(double: 42)), NSComparisonResult.OrderedSame)
352+
XCTAssertEqual(NSNumber(double: 42).compare(NSNumber(double: 0)), NSComparisonResult.OrderedDescending)
353+
XCTAssertEqual(NSNumber(double: -37).compare(NSNumber(double: 12345)), NSComparisonResult.OrderedAscending)
354+
355+
XCTAssertEqual(NSNumber(double: 1).compare(NSNumber(bool: true)), NSComparisonResult.OrderedSame)
356+
XCTAssertEqual(NSNumber(double: 0.1).compare(NSNumber(bool: false)), NSComparisonResult.OrderedDescending)
357+
XCTAssertEqual(NSNumber(double: 0.9).compare(NSNumber(bool: true)), NSComparisonResult.OrderedAscending)
358+
359+
XCTAssertEqual(NSNumber(double: 42).compare(NSNumber(unsignedChar: 42)), NSComparisonResult.OrderedSame)
360+
XCTAssertEqual(NSNumber(double: 0.1).compare(NSNumber(unsignedChar: 0)), NSComparisonResult.OrderedDescending)
361+
XCTAssertEqual(NSNumber(double: -254.9).compare(NSNumber(unsignedChar: 255)), NSComparisonResult.OrderedAscending)
362+
363+
XCTAssertEqual(NSNumber(double: 42).compare(NSNumber(float: 42)), NSComparisonResult.OrderedSame)
364+
XCTAssertEqual(NSNumber(double: 0).compare(NSNumber(float: -37.5)), NSComparisonResult.OrderedDescending)
365+
XCTAssertEqual(NSNumber(double: -37.5).compare(NSNumber(float: 1234.5)), NSComparisonResult.OrderedAscending)
366+
}
367+
}

0 commit comments

Comments
 (0)