UNPKG

number.issafeinteger

Version:

An ES-spec-compliant Number.isSafeInteger shim/polyfill/replacement that works as far down as ES3

53 lines (44 loc) 1.67 kB
'use strict'; module.exports = function (isSafeInteger, t) { t.test('should be truthy on integers', function (st) { st.equal(isSafeInteger(4), true); st.equal(isSafeInteger(4.0), true); st.equal(isSafeInteger(1234), true); st.equal(isSafeInteger(-1234), true); st.equal(isSafeInteger(Math.pow(2, 53) - 1), true); st.equal(isSafeInteger(-Math.pow(2, 53) + 1), true); st.equal(isSafeInteger(0), true); st.equal(isSafeInteger(-0), true); st.end(); }); t.test('should be false when the type is not number', function (st) { st.equal(isSafeInteger(undefined), false); st.equal(isSafeInteger(null), false); st.equal(isSafeInteger('foo'), false); st.equal(isSafeInteger({ valueOf: function () { return 3; } }), false); st.equal(isSafeInteger({ valueOf: function () { throw new Error(); } }), false); if (typeof BigInt === 'function') { st.equal(isSafeInteger(BigInt(2)), false); } st.end(); }); t.test('should be false when NaN', function (st) { st.equal(isSafeInteger(NaN), false); st.end(); }); t.test('should be false when ∞', function (st) { st.equal(isSafeInteger(Infinity), false); st.equal(isSafeInteger(-Infinity), false); st.end(); }); t.test('should be false when number is not integer', function (st) { st.equal(isSafeInteger(3.4), false); st.equal(isSafeInteger(-3.4), false); st.end(); }); t.test('should be false when abs(number) is 2^53 or larger', function (st) { st.equal(isSafeInteger(Math.pow(2, 53)), false); st.equal(isSafeInteger(Math.pow(2, 54)), false); st.equal(isSafeInteger(-Math.pow(2, 53)), false); st.equal(isSafeInteger(-Math.pow(2, 54)), false); st.end(); }); };