Merge branch 'cpdecimalnumber-fix'

This commit is contained in:
Eric Wong committed 2012-08-05 10:10:40 +08:00
commit 7ad24efe4f
3 files changed
+13 -14

No files matched your search

+6 -1
View File
@@ -115,7 +115,8 @@ function CPDecimalMakeWithString(string, locale)
// Note: this doesn't accept .01 for example, should it?
// If yes simply add '?' after integer part group, i.e. ([+\-]?)((?:0|[1-9]\d*)?)
var matches = string.match(/^([+\-]?)((?:0|[1-9]\d*))(?:\.(\d*))?(?:[eE]([+\-]?)(\d+))?$/);
// Note: now it accept .01 style.
var matches = string.match(/^([+\-]?)((?:0|[1-9]\d*)?)(?:\.(\d*))?(?:[eE]([+\-]?)(\d+))?$/);
if (!matches)
return CPDecimalMakeNaN();
@@ -142,6 +143,10 @@ function CPDecimalMakeWithString(string, locale)
// input is too long, increase exponent and truncate
exponent += inputlength - CPDecimalMaxDigits;
}
else if (inputlength === 0)
{
return CPDecimalMakeNaN();
}
if (exponent > CPDecimalMaxExponent || exponent < CPDecimalMinExponent)
return CPDecimalMakeNaN();
+7 -9
View File
@@ -145,20 +145,14 @@
dcmn = [[CPDecimalNumber alloc] initWithString:@"foo"];
[self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 2 overflow should return NaN"];
dcmn = [[CPDecimalNumber alloc] initWithString:@".123"];
dcmn = [[CPDecimalNumber alloc] initWithString:@"0123"];
[self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 3 overflow should return NaN"];
dcmn = [[CPDecimalNumber alloc] initWithString:@"-.123"];
dcmn = [[CPDecimalNumber alloc] initWithString:@"1e200"];
[self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 4 overflow should return NaN"];
dcmn = [[CPDecimalNumber alloc] initWithString:@"0123"];
[self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 5 overflow should return NaN"];
dcmn = [[CPDecimalNumber alloc] initWithString:@"1e200"];
[self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 6 overflow should return NaN"];
dcmn = [[CPDecimalNumber alloc] initWithString:@"12312e-23421"];
[self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 7 overflow should return NaN"];
[self assert:CPOrderedSame equals:[dcmn compare:[CPDecimalNumber notANumber]] message:"initWithString: 5 overflow should return NaN"];
}
- (void)testAdd
@@ -522,6 +516,10 @@
[self assert:"123456789123456789123456789000000000000000" equals:[dcmn stringValue] message:"stringValue: - large number"];
dcmn = [CPDecimalNumber decimalNumberWithString:@"82346.2341144"];
[self assert:"82346.2341144" equals:[dcmn descriptionWithLocale:nil] message:"descriptionWithLocale: - large number"];
dcmn = [CPDecimalNumber decimalNumberWithString:@".125"];
[self assert:"0.125" equals:[dcmn descriptionWithLocale:nil] message:"stringValue: - no integral part number"];
dcmn = [CPDecimalNumber decimalNumberWithString:@"-.003"];
[self assert:"-0.003" equals:[dcmn descriptionWithLocale:nil] message:"stringValue: - no integral part negative number"];
}
- (void)testEncoding
-4
View File
@@ -99,10 +99,6 @@
[self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti9: catch of invalid number string. Should return NaN"];
dcm = CPDecimalMakeWithString(@"-0001");
[self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti10: catch of invalid number string. Should return NaN"];
dcm = CPDecimalMakeWithString(@".123");
[self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti11: catch of invalid number string. Should return NaN"];
dcm = CPDecimalMakeWithString(@"-.1");
[self assertTrue:dcm._isNaN message:"CPDecimalMakeWithString() Ti12: catch of invalid number string. Should return NaN"];
//test make with parts
dcm = CPDecimalMakeWithParts(10127658,2);