Fixed: CPNumber intValue did not return an integer.

We expect this method to return a whole number like in Objective-C. This also goes for the related methods, `shortValue`, `longValue` and `longLongValue`.

Also adds more tests (in addition to the existing, already failing test).
This commit is contained in:
Alexander Ljungberg committed 2016-04-01 22:22:03 +01:00
1 parent 48108cebc9
commit e13f5ed730
2 files changed
+43 -40

No files matched your search

+13 -32
View File
@@ -25,6 +25,8 @@
@import "CPObject.j"
@import "CPObjJRuntime.j"
#define CAST_TO_INT(x) ((x) >= 0 ? Math.floor((x)) : Math.ceil((x)))
var CPNumberUIDs = new CFMutableDictionary();
/*!
@@ -253,42 +255,27 @@ FIXME: Do we need this?
- (int)intValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
return CAST_TO_INT(self);
}
- (int)integerValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
return CAST_TO_INT(self);
}
- (long long)longLongValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
return CAST_TO_INT(self);
}
- (long)longValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
return CAST_TO_INT(self);
}
- (short)shortValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
return CAST_TO_INT(self);
}
- (CPString)stringValue
@@ -303,10 +290,8 @@ FIXME: Do we need this?
- (unsigned int)unsignedIntValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
// Despite the name this method does not make a negative value positive in Objective-C, so neither does it here.
return CAST_TO_INT(self);
}
/*
- (unsigned long long)unsignedLongLongValue
@@ -317,18 +302,14 @@ FIXME: Do we need this?
*/
- (unsigned long)unsignedLongValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
// Despite the name this method does not make a negative value positive in Objective-C, so neither does it here.
return CAST_TO_INT(self);
}
- (unsigned short)unsignedShortValue
{
if (typeof self == "boolean")
return self ? 1 : 0;
return self;
// Despite the name this method does not make a negative value positive in Objective-C, so neither does it here.
return CAST_TO_INT(self);
}
- (CPComparisonResult)compare:(CPNumber)aNumber
+30 -8
View File
@@ -12,21 +12,43 @@
[self assertThrows:function () { [34 compare:[CPNull null]] }];
}
- (void)testintValue
- (void)testIntValue
{
/*
For reference:
[[NSNumber numberWithDouble:3.1] intValue]: 3
[[NSNumber numberWithDouble:3.9] intValue]: 3
[[NSNumber numberWithDouble:-3.1] intValue]: -3
[[NSNumber numberWithDouble:-3.9] intValue]: -3
[[NSNumber numberWithDouble:3.1] integerValue]: 3
[[NSNumber numberWithDouble:3.9] integerValue]: 3
[[NSNumber numberWithDouble:-3.1] integerValue]: -3
[[NSNumber numberWithDouble:-3.9] integerValue]: -3
*/
var testStrings = [
// [090, 90], // Removed cause Rhino does not support numbers starting with '0'
[-1, -1],
[3.1415, 3],
[2.7183, 2],
[-0, 0],
[00, 0],
[-00, 0],
[+001, 1],
[-1, -1],
[3.1415, 3],
[3.5415, 3],
[-3.1415, -3],
[-3.5415, -3],
[2.7183, 2],
[-0, 0],
[00, 0],
[-00, 0],
[+001, 1],
];
for (var i = 0; i < testStrings.length; i++)
[self assert:[testStrings[i][0] shortValue] equals:testStrings[i][1]];
for (var i = 0; i < testStrings.length; i++)
[self assert:[testStrings[i][0] intValue] equals:testStrings[i][1]];
for (var i = 0; i < testStrings.length; i++)
[self assert:[testStrings[i][0] longValue] equals:testStrings[i][1]];
for (var i = 0; i < testStrings.length; i++)
[self assert:[testStrings[i][0] longLongValue] equals:testStrings[i][1]];
for (var i = 0; i < testStrings.length; i++)
[self assert:[testStrings[i][0] integerValue] equals:testStrings[i][1]];
}