]> git.kaiwu.me - njs.git/commitdiff
Math.sign() method.
authorValentin Bartenev <vbart@nginx.com>
Mon, 31 Oct 2016 13:28:12 +0000 (16:28 +0300)
committerValentin Bartenev <vbart@nginx.com>
Mon, 31 Oct 2016 13:28:12 +0000 (16:28 +0300)
njs/njs_math.c
njs/test/njs_unit_test.c

index 72729975d4ac01057c6a1f2147d0a2722453f6d9..ac6ccc9ee2723ead89340ca73e04298a573627de 100644 (file)
@@ -333,6 +333,29 @@ njs_object_math_round(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 }
 
 
+static njs_ret_t
+njs_object_math_sign(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+    njs_index_t unused)
+{
+    double  num;
+
+    if (nargs > 1) {
+        num = args[1].data.u.number;
+
+        if (!njs_is_nan(num) && num != 0) {
+            num = signbit(num) ? -1 : 1;
+        }
+
+    } else {
+        num = NJS_NAN;
+    }
+
+    njs_number_set(&vm->retval, num);
+
+    return NXT_OK;
+}
+
+
 static njs_ret_t
 njs_object_math_sin(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_index_t unused)
@@ -567,6 +590,14 @@ static const njs_object_prop_t  njs_math_object_properties[] =
                      NJS_SKIP_ARG, NJS_NUMBER_ARG),
     },
 
+    /* ES6. */
+    {
+        .type = NJS_METHOD,
+        .name = njs_string("sign"),
+        .value = njs_native_function(njs_object_math_sign, 0,
+                     NJS_SKIP_ARG, NJS_NUMBER_ARG),
+    },
+
     {
         .type = NJS_METHOD,
         .name = njs_string("sin"),
index c0f4cf9e0b5f61244391781004296a91dd3c731c..dd996236c27134018f2dc369d4a08c30bda4a5cb 100644 (file)
@@ -5373,6 +5373,24 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("Math.pow()"),
       nxt_string("NaN") },
 
+    { nxt_string("Math.sign(5)"),
+      nxt_string("1") },
+
+    { nxt_string("Math.sign(-5)"),
+      nxt_string("-1") },
+
+    { nxt_string("Math.sign(0)"),
+      nxt_string("0") },
+
+    { nxt_string("Math.sign(-0.0)"),
+      nxt_string("-0") },
+
+    { nxt_string("Math.sign(NaN)"),
+      nxt_string("NaN") },
+
+    { nxt_string("Math.sign()"),
+      nxt_string("NaN") },
+
     { nxt_string("Math.trunc(3.9)"),
       nxt_string("3") },