diff --git a/react-packager/src/Resolver/polyfills/Number.es6.js b/react-packager/src/Resolver/polyfills/Number.es6.js index 333bfb94..abd59bba 100644 --- a/react-packager/src/Resolver/polyfills/Number.es6.js +++ b/react-packager/src/Resolver/polyfills/Number.es6.js @@ -10,6 +10,21 @@ * @polyfill */ +if (Number.EPSILON === undefined) { + Object.defineProperty(Number, 'EPSILON', { + value: Math.pow(2, -52), + }); +} +if (Number.MAX_SAFE_INTEGER === undefined) { + Object.defineProperty(Number, 'MAX_SAFE_INTEGER', { + value: Math.pow(2, 53) - 1, + }); +} +if (Number.MIN_SAFE_INTEGER === undefined) { + Object.defineProperty(Number, 'MIN_SAFE_INTEGER', { + value: -(Math.pow(2, 53) - 1), + }); +} if (!Number.isNaN) { // https://github.com/dherman/tc39-codex-wiki/blob/master/data/es6/number/index.md#polyfill-for-numberisnan const globalIsNaN = global.isNaN; diff --git a/react-packager/src/Resolver/polyfills/__tests__/Number.es6.js b/react-packager/src/Resolver/polyfills/__tests__/Number.es6-test.js similarity index 52% rename from react-packager/src/Resolver/polyfills/__tests__/Number.es6.js rename to react-packager/src/Resolver/polyfills/__tests__/Number.es6-test.js index 44f93d0c..d91a3aa5 100644 --- a/react-packager/src/Resolver/polyfills/__tests__/Number.es6.js +++ b/react-packager/src/Resolver/polyfills/__tests__/Number.es6-test.js @@ -12,6 +12,40 @@ jest.autoMockOff(); describe('Number (ES6)', () => { + describe('EPSILON', () => { + beforeEach(() => { + delete Number.EPSILON; + jest.resetModuleRegistry(); + require('../Number.es6'); + }); + it('is 2^(-52)', () => { + expect(Number.EPSILON).toBe(Math.pow(2, -52)); + }); + it('can be used to test equality', () => { + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON#Testing_equality + expect(Number.EPSILON).toBeGreaterThan(Math.abs(0.2 - 0.3 + 0.1)); + }); + }); + describe('MAX_SAFE_INTEGER', () => { + beforeEach(() => { + delete Number.MAX_SAFE_INTEGER; + jest.resetModuleRegistry(); + require('../Number.es6'); + }); + it('is 2^53 - 1', () => { + expect(Number.MAX_SAFE_INTEGER).toBe(Math.pow(2, 53) - 1); + }); + }); + describe('MIN_SAFE_INTEGER', () => { + beforeEach(() => { + delete Number.MIN_SAFE_INTEGER; + jest.resetModuleRegistry(); + require('../Number.es6'); + }); + it('is -(2^53 - 1)', () => { + expect(Number.MIN_SAFE_INTEGER).toBe(-(Math.pow(2, 53) - 1)); + }); + }); describe('isNaN()', () => { // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Examples beforeEach(() => {