From 311373f82ee242bac25d7a1f0002481ff6f229ca Mon Sep 17 00:00:00 2001 From: Sergey Rubanov Date: Sun, 3 Nov 2019 21:27:56 +0300 Subject: [PATCH] Fix Math.signbit semantics According [spec draft](https://tc39.es/proposal-Math.signbit/Math.signbit.html#spec), Math.signbit returns `true` only for negative values and `Math.signbit(NaN)` should return `true` --- .../core-js/modules/esnext.math.signbit.js | 2 +- tests/commonjs.js | 2 +- tests/pure/esnext.math.signbit.js | 20 +++++++++---------- tests/tests/esnext.math.signbit.js | 20 +++++++++---------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/core-js/modules/esnext.math.signbit.js b/packages/core-js/modules/esnext.math.signbit.js index 0d8f4e82bc47..3ece8eae7578 100644 --- a/packages/core-js/modules/esnext.math.signbit.js +++ b/packages/core-js/modules/esnext.math.signbit.js @@ -4,6 +4,6 @@ var $ = require('../internals/export'); // https://github.com/tc39/proposal-Math.signbit $({ target: 'Math', stat: true }, { signbit: function signbit(x) { - return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0; + return (x = +x) == x && x == 0 ? 1 / x == -Infinity : x < 0; } }); diff --git a/tests/commonjs.js b/tests/commonjs.js index 09e376aad2e2..fe674182881a 100644 --- a/tests/commonjs.js +++ b/tests/commonjs.js @@ -143,7 +143,7 @@ for (const _PATH of ['../packages/core-js-pure', '../packages/core-js']) { ok(load('features/math/radians')(180) === Math.PI); ok(load('features/math/scale')(3, 1, 2, 1, 2) === 3); ok(load('features/math/umulh')(0xFFFFFFFF, 7) === 6); - ok(load('features/math/signbit')(-2) === false); + ok(load('features/math/signbit')(-2) === true); ok(typeof load('features/math/seeded-prng')({ seed: 42 }).next().value === 'number'); ok(load('features/number/constructor')('5') === 5); ok(load('features/number/epsilon') === 2 ** -52); diff --git a/tests/pure/esnext.math.signbit.js b/tests/pure/esnext.math.signbit.js index 9e29c8e08580..4f0efa8a24b2 100644 --- a/tests/pure/esnext.math.signbit.js +++ b/tests/pure/esnext.math.signbit.js @@ -2,14 +2,14 @@ import signbit from 'core-js-pure/features/math/signbit'; QUnit.test('Math.signbit', assert => { assert.isFunction(signbit); - assert.same(signbit(NaN), NaN); - assert.same(signbit(), NaN); - assert.same(signbit(-0), false); - assert.same(signbit(0), true); - assert.strictEqual(signbit(Infinity), true); - assert.strictEqual(signbit(-Infinity), false); - assert.strictEqual(signbit(13510798882111488), true); - assert.strictEqual(signbit(-13510798882111488), false); - assert.strictEqual(signbit(42.5), true); - assert.strictEqual(signbit(-42.5), false); + assert.strictEqual(signbit(NaN), false); + assert.strictEqual(signbit(), false); + assert.strictEqual(signbit(-0), true); + assert.strictEqual(signbit(0), false); + assert.strictEqual(signbit(Infinity), false); + assert.strictEqual(signbit(-Infinity), true); + assert.strictEqual(signbit(13510798882111488), false); + assert.strictEqual(signbit(-13510798882111488), true); + assert.strictEqual(signbit(42.5), false); + assert.strictEqual(signbit(-42.5), true); }); diff --git a/tests/tests/esnext.math.signbit.js b/tests/tests/esnext.math.signbit.js index 60e913d3dbde..44ac0feeb10b 100644 --- a/tests/tests/esnext.math.signbit.js +++ b/tests/tests/esnext.math.signbit.js @@ -5,14 +5,14 @@ QUnit.test('Math.signbit', assert => { assert.arity(signbit, 1); assert.looksNative(signbit); assert.nonEnumerable(Math, 'signbit'); - assert.same(signbit(NaN), NaN); - assert.same(signbit(), NaN); - assert.same(signbit(-0), false); - assert.same(signbit(0), true); - assert.strictEqual(signbit(Infinity), true); - assert.strictEqual(signbit(-Infinity), false); - assert.strictEqual(signbit(13510798882111488), true); - assert.strictEqual(signbit(-13510798882111488), false); - assert.strictEqual(signbit(42.5), true); - assert.strictEqual(signbit(-42.5), false); + assert.strictEqual(signbit(NaN), false); + assert.strictEqual(signbit(), false); + assert.strictEqual(signbit(-0), true); + assert.strictEqual(signbit(0), false); + assert.strictEqual(signbit(Infinity), false); + assert.strictEqual(signbit(-Infinity), true); + assert.strictEqual(signbit(13510798882111488), false); + assert.strictEqual(signbit(-13510798882111488), true); + assert.strictEqual(signbit(42.5), false); + assert.strictEqual(signbit(-42.5), true); });