Last active
August 29, 2015 14:10
-
-
Save marksands/8a8b0123c469fc80d51e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Cocoa/Cocoa.h> | |
#import <Foundation/Foundation.h> | |
#import <XCTest/XCTest.h> | |
@interface NSDecimalNumberTests : XCTestCase | |
@end | |
@implementation DecimalTests | |
#pragma mark - NSDecimalNumberTests | |
- (void)testDecimalCompareDecimal { | |
NSDecimalNumber *decimalSeven = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
NSDecimalNumber *decimalEight = [NSDecimalNumber decimalNumberWithString:@"8"]; | |
NSComparisonResult result = [decimalSeven compare:decimalEight]; | |
XCTAssertEqual(result, NSOrderedAscending); | |
} | |
- (void)testDecimalCompareNil { | |
NSDecimalNumber *decimalSeven = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
NSDecimalNumber *decimalEight = nil; | |
NSComparisonResult result = [decimalSeven compare:decimalEight]; | |
XCTAssertEqual(result, NSOrderedDescending); | |
} | |
- (void)testNilCompareDecimal { | |
NSDecimalNumber *decimalSeven = nil; | |
NSDecimalNumber *decimalEight = [NSDecimalNumber decimalNumberWithString:@"8"]; | |
NSComparisonResult result = [decimalSeven compare:decimalEight]; | |
XCTAssertEqual(result, NSOrderedSame); | |
} | |
- (void)testDecimalEqualToNumberDecimal { | |
NSDecimalNumber *decimalSeven1 = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
NSDecimalNumber *decimalSeven2 = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
BOOL result = [decimalSeven1 isEqualToNumber:decimalSeven2]; | |
XCTAssertTrue(result); | |
} | |
- (void)testDecimalEqualToNumberNil { | |
NSDecimalNumber *decimalSeven = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
NSDecimalNumber *decimalEight = nil; | |
BOOL result = [decimalSeven isEqualToNumber:decimalEight]; | |
XCTAssertFalse(result); | |
} | |
- (void)testNilEqualToNumberDecimal { | |
NSDecimalNumber *decimalSeven = nil; | |
NSDecimalNumber *decimalEight = [NSDecimalNumber decimalNumberWithString:@"8"]; | |
BOOL result = [decimalSeven isEqualToNumber:decimalEight]; | |
XCTAssertFalse(result); | |
} | |
- (void)testDecimalEqualToDecimal { | |
NSDecimalNumber *decimalSeven1 = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
NSDecimalNumber *decimalSeven2 = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
BOOL result = [decimalSeven1 isEqual:decimalSeven2]; | |
XCTAssertTrue(result); | |
} | |
- (void)testDecimalEqualToNil { | |
NSDecimalNumber *decimalSeven = [NSDecimalNumber decimalNumberWithString:@"7"]; | |
NSDecimalNumber *decimalEight = nil; | |
BOOL result = [decimalSeven isEqual:decimalEight]; | |
XCTAssertFalse(result); | |
} | |
- (void)testNilEqualToDecimal { | |
NSDecimalNumber *decimalSeven = nil; | |
NSDecimalNumber *decimalEight = [NSDecimalNumber decimalNumberWithString:@"8"]; | |
BOOL result = [decimalSeven isEqual:decimalEight]; | |
XCTAssertFalse(result); | |
} | |
#pragma mark - NSNumber | |
- (void)testNumberCompareNumber { | |
NSNumber *numberSeven = @7; | |
NSNumber *numberEight = @8; | |
NSComparisonResult result = [numberSeven compare:numberEight]; | |
XCTAssertEqual(result, NSOrderedAscending); | |
} | |
- (void)testNumberCompareNil_crashes { | |
NSNumber *numberSeven = @7; | |
NSNumber *numberEight = nil; | |
XCTAssertThrows([numberSeven compare:numberEight]); | |
} | |
- (void)testNilCompareNumber { | |
NSNumber *numberSeven = nil; | |
NSNumber *numberEight = @8; | |
NSComparisonResult result = [numberSeven compare:numberEight]; | |
XCTAssertEqual(result, NSOrderedSame); | |
} | |
- (void)testNumberEqualToNumberNumber { | |
NSNumber *numberSeven1 = @7; | |
NSNumber *numberSeven2 = @7; | |
BOOL result = [numberSeven1 isEqualToNumber:numberSeven2]; | |
XCTAssertTrue(result); | |
} | |
- (void)testNumberEqualToNumberNil_crashes { | |
NSNumber *numberSeven = @7; | |
NSNumber *numberEight = nil; | |
XCTAssertThrows([numberSeven isEqualToNumber:numberEight]); | |
} | |
- (void)testNilEqualToNumberNumber { | |
NSNumber *numberSeven = nil; | |
NSNumber *numberEight = @8; | |
BOOL result = [numberSeven isEqualToNumber:numberEight]; | |
XCTAssertFalse(result); | |
} | |
- (void)testNumberEqualToNumber { | |
NSNumber *numberSeven1 = @7; | |
NSNumber *numberSeven2 = @7; | |
BOOL result = [numberSeven1 isEqual:numberSeven2]; | |
XCTAssertTrue(result); | |
} | |
- (void)testNumberEqualToNil { | |
NSNumber *numberSeven = @7; | |
NSNumber *numberEight = nil; | |
BOOL result = [numberSeven isEqual:numberEight]; | |
XCTAssertFalse(result); | |
} | |
- (void)testNilEqualToNumber { | |
NSNumber *numberSeven = nil; | |
NSNumber *numberEight = @8; | |
BOOL result = [numberSeven isEqual:numberEight]; | |
XCTAssertFalse(result); | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
compare:
-(NSComparisonResult)compare:(NSNumber *)decimalNumber
apparently turns nil into 0 when doing the comparison against nil. Even though the signature for NSDecimalNumber's compare is the same as NSNumber. However, when comparing nil against an NSNumber this statement throws an exception.isEqualToNumber:
-(BOOL)isEqualToNumber:(NSNumber *)number
silently fails with NSDecimalNumber, yet it crashes for NSNumber when the 2nd argument is nil. According to the documentation:So it's no surprise that this method also crashes since it relies on
compare:
.isEqual:
-(BOOL)isEqual:(id)object
surprisingly silently fails for both NSDecimalNumber and NSNumber.