diff --git a/Libraries/LibJS/Runtime/NumberConstructor.cpp b/Libraries/LibJS/Runtime/NumberConstructor.cpp index 924c14a0d4..21b6cc01ee 100644 --- a/Libraries/LibJS/Runtime/NumberConstructor.cpp +++ b/Libraries/LibJS/Runtime/NumberConstructor.cpp @@ -28,6 +28,7 @@ #include #include #include +#include namespace JS { @@ -35,6 +36,12 @@ NumberConstructor::NumberConstructor() { put("prototype", interpreter().number_prototype()); put("length", Value(1)); + put("EPSILON", Value(pow(2, -52))); + put("MAX_SAFE_INTEGER", Value(pow(2, 53) - 1)); + put("MIN_SAFE_INTEGER", Value(-(pow(2, 53) - 1))); + put("NEGATIVE_INFINITY", Value(-js_infinity().as_double())); + put("POSITIVE_INFINITY", js_infinity()); + put("NaN", js_nan()); } NumberConstructor::~NumberConstructor() diff --git a/Libraries/LibJS/Tests/Number-constants.js b/Libraries/LibJS/Tests/Number-constants.js new file mode 100644 index 0000000000..7d52bce470 --- /dev/null +++ b/Libraries/LibJS/Tests/Number-constants.js @@ -0,0 +1,15 @@ +try { + assert(Number.EPSILON === 2 ** -52); + assert(Number.EPSILON > 0); + assert(Number.MAX_SAFE_INTEGER === 2 ** 53 - 1); + assert(Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2); + assert(Number.MIN_SAFE_INTEGER === -(2 ** 53 - 1)); + assert(Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2); + assert(Number.POSITIVE_INFINITY === Infinity); + assert(Number.NEGATIVE_INFINITY === -Infinity); + assert(isNaN(Number.NaN)); + + console.log("PASS"); +} catch (e) { + console.log("FAIL: " + e); +}