From c84d31ce9e55344bea91fe01e5969227fedd28b3 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Sat, 11 Jul 2015 00:08:12 +0300 Subject: [PATCH] Fix sign of number remainder (ecma_op_number_remainder). JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com --- jerry-core/ecma/base/ecma-helpers-number.cpp | 10 +++++++++- tests/jerry/arithmetics.js | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/jerry-core/ecma/base/ecma-helpers-number.cpp b/jerry-core/ecma/base/ecma-helpers-number.cpp index b09e79cdb..8b7d1a340 100644 --- a/jerry-core/ecma/base/ecma-helpers-number.cpp +++ b/jerry-core/ecma/base/ecma-helpers-number.cpp @@ -683,7 +683,15 @@ ecma_number_calc_remainder (ecma_number_t left_num, /**< left operand */ ecma_number_t q = ecma_number_trunc (ecma_number_divide (n, d)); - return ecma_number_substract (n, ecma_number_multiply (d, q)); + ecma_number_t r = ecma_number_substract (n, ecma_number_multiply (d, q)); + + if (ecma_number_is_zero (r) + && ecma_number_is_negative (n)) + { + r = ecma_number_negate (r); + } + + return r; } /* ecma_number_calc_remainder */ /** diff --git a/tests/jerry/arithmetics.js b/tests/jerry/arithmetics.js index 0c871ba87..cdbaa9527 100644 --- a/tests/jerry/arithmetics.js +++ b/tests/jerry/arithmetics.js @@ -32,3 +32,8 @@ assert((number % 79) == 2); var num1 = 1234567, num2 = 1234000; assert((num1 % num2) == 567); + +assert (1 / (-1 % -1) < 0); +assert (1 / (-1 % 1) < 0); +assert (1 / (1 % -1) > 0); +assert (1 / (1 % 1) > 0);