Преглед изворни кода

LibJS: Add Number constants

Linus Groh пре 5 година
родитељ
комит
b7032b4972

+ 7 - 0
Libraries/LibJS/Runtime/NumberConstructor.cpp

@@ -28,6 +28,7 @@
 #include <LibJS/Runtime/Error.h>
 #include <LibJS/Runtime/NumberConstructor.h>
 #include <LibJS/Runtime/NumberObject.h>
+#include <math.h>
 
 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()

+ 15 - 0
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);
+}