mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-11-13 10:13:50 +00:00
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:
1 parent
48108cebc9
commit
e13f5ed730
2 files changed
+43
-40
No files matched your search
+13
-32
@@ -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
|
||||
|
||||
@@ -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]];
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user