details: http://hg.nginx.org/njs/rev/4f4bda866d8e
branches:
changeset: 262:4f4bda866d8e
user: Valentin Bartenev
date: Fri Nov 18 17:25:25 2016 +0300
description:
More Math methods from ES6.
diffstat:
njs/njs_math.c | 333 +++
njs/test/njs_unit_test.c | 292 +
2 files changed, 625 insertions(+), 0 deletions(-)
diffs (820 lines):
diff -r f402a8c64d7a -r 4f4bda866d8e njs/njs_math.c
--- a/njs/njs_math.cWed Nov 16 15:21:07 2016 +0300
+++ b/njs/njs_math.cFri Nov 18 17:25:25 2016 +0300
@@ -69,6 +69,25 @@ njs_object_math_acos(njs_vm_t *vm, njs_v
static njs_ret_t
+njs_object_math_acosh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = acosh(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
njs_object_math_asin(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
{
@@ -97,6 +116,25 @@ njs_object_math_asin(njs_vm_t *vm, njs_v
static njs_ret_t
+njs_object_math_asinh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = asinh(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
njs_object_math_atan(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
{
@@ -138,6 +176,44 @@ njs_object_math_atan2(njs_vm_t *vm, njs_
static njs_ret_t
+njs_object_math_atanh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = atanh(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
+njs_object_math_cbrt(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = cbrt(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
njs_object_math_ceil(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
{
@@ -176,6 +252,25 @@ njs_object_math_cos(njs_vm_t *vm, njs_va
static njs_ret_t
+njs_object_math_cosh(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = cosh(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
njs_object_math_exp(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
{
@@ -195,6 +290,25 @@ njs_object_math_exp(njs_vm_t *vm, njs_va
static njs_ret_t
+njs_object_math_expm1(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = expm1(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
njs_object_math_floor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
{
@@ -214,6 +328,25 @@ njs_object_math_floor(njs_vm_t *vm, njs_
static njs_ret_t
+njs_object_math_fround(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = (float) args[1].data.u.number;
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
njs_object_math_hypot(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
{
@@ -264,6 +397,72 @@ njs_object_math_log(njs_vm_t *vm, njs_va
static njs_ret_t
+njs_object_math_log10(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = log10(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
+njs_object_math_log1p(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
+njs_index_t unused)
+{
+double num;
+
+if (nargs > 1) {
+num = log1p(args[1].data.u.number);
+
+} else {
+num = NAN;
+}
+
+njs_number_set(>retval, num);
+
+return NXT_OK;
+}
+
+
+static njs_ret_t
+njs_object_math_log2(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 (NXT_SOLARIS)
+/* On Solaris 10 log(-1) returns -Infinity. */
+if (num < 0) {
+num = NAN;
+}
+#endif
+
+num