mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:57:35 +00:00
LibJS: Implement Number.isInteger()
This commit is contained in:
parent
7bd6b58b29
commit
14c7988eea
3 changed files with 46 additions and 0 deletions
|
@ -41,6 +41,7 @@ NumberConstructor::NumberConstructor()
|
|||
: NativeFunction("Number", *interpreter().global_object().function_prototype())
|
||||
{
|
||||
put_native_function("isFinite", is_finite, 1);
|
||||
put_native_function("isInteger", is_integer, 1);
|
||||
put_native_function("isNaN", is_nan, 1);
|
||||
put_native_function("isSafeInteger", is_safe_integer, 1);
|
||||
|
||||
|
@ -80,6 +81,12 @@ Value NumberConstructor::is_finite(Interpreter& interpreter)
|
|||
return Value(interpreter.argument(0).is_finite_number());
|
||||
}
|
||||
|
||||
Value NumberConstructor::is_integer(Interpreter& interpreter)
|
||||
{
|
||||
auto value = interpreter.argument(0);
|
||||
return Value(value.is_number() && (i32)value.as_double() == value.as_double());
|
||||
}
|
||||
|
||||
Value NumberConstructor::is_nan(Interpreter& interpreter)
|
||||
{
|
||||
return Value(interpreter.argument(0).is_nan());
|
||||
|
|
|
@ -43,6 +43,7 @@ private:
|
|||
virtual const char* class_name() const override { return "NumberConstructor"; }
|
||||
|
||||
static Value is_finite(Interpreter&);
|
||||
static Value is_integer(Interpreter&);
|
||||
static Value is_nan(Interpreter&);
|
||||
static Value is_safe_integer(Interpreter&);
|
||||
};
|
||||
|
|
38
Libraries/LibJS/Tests/Number.isInteger.js
Normal file
38
Libraries/LibJS/Tests/Number.isInteger.js
Normal file
|
@ -0,0 +1,38 @@
|
|||
load("test-common.js");
|
||||
|
||||
try {
|
||||
assert(Number.isInteger.length === 1);
|
||||
|
||||
assert(Number.isInteger(0) === true);
|
||||
assert(Number.isInteger(42) === true);
|
||||
assert(Number.isInteger(-10000) === true);
|
||||
assert(Number.isInteger(5) === true);
|
||||
assert(Number.isInteger(5.0) === true);
|
||||
assert(Number.isInteger(5.0000000000000001) === true);
|
||||
// FIXME: values outside of i32's range should still return true
|
||||
// assert(Number.isInteger(+2147483647 + 1) === true);
|
||||
// assert(Number.isInteger(-2147483648 - 1) === true);
|
||||
// assert(Number.isInteger(99999999999999999999999999999999999) === true);
|
||||
|
||||
assert(Number.isInteger(5.000000000000001) === false);
|
||||
assert(Number.isInteger(1.23) === false);
|
||||
assert(Number.isInteger("") === false);
|
||||
assert(Number.isInteger("0") === false);
|
||||
assert(Number.isInteger("42") === false);
|
||||
assert(Number.isInteger(true) === false);
|
||||
assert(Number.isInteger(false) === false);
|
||||
assert(Number.isInteger(null) === false);
|
||||
assert(Number.isInteger([]) === false);
|
||||
assert(Number.isInteger(Infinity) === false);
|
||||
assert(Number.isInteger(-Infinity) === false);
|
||||
assert(Number.isInteger(NaN) === false);
|
||||
assert(Number.isInteger() === false);
|
||||
assert(Number.isInteger(undefined) === false);
|
||||
assert(Number.isInteger("foo") === false);
|
||||
assert(Number.isInteger({}) === false);
|
||||
assert(Number.isInteger([1, 2, 3]) === false);
|
||||
|
||||
console.log("PASS");
|
||||
} catch (e) {
|
||||
console.log("FAIL: " + e.message);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue