Merge pull request #9256 from timvandermeij/log2

Use native `Math` functions in the custom `log2` function
This commit is contained in:
Tim van der Meij 2017-12-10 16:43:53 +01:00 committed by GitHub
commit af14620b75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 6 deletions

View File

@ -348,6 +348,14 @@ PDFJS.compatibilityChecked = true;
Array.prototype.includes = require('core-js/fn/array/includes');
})();
// Provides support for Math.log2 in legacy browsers.
// Support: IE.
(function checkMathLog2() {
if (Math.log2) {
return;
}
Math.log2 = require('core-js/fn/math/log2');
})();
// Provides support for Number.isNaN in legacy browsers.
// Support: IE.

View File

@ -600,13 +600,14 @@ function string32(value) {
(value >> 8) & 0xff, value & 0xff);
}
// Calculate the base 2 logarithm of the number `x`. This differs from the
// native function in the sense that it returns the ceiling value and that it
// returns 0 instead of `Infinity`/`NaN` for `x` values smaller than/equal to 0.
function log2(x) {
var n = 1, i = 0;
while (x > n) {
n <<= 1;
i++;
if (x <= 0) {
return 0;
}
return i;
return Math.ceil(Math.log2(x));
}
function readInt8(data, start) {

View File

@ -15,7 +15,7 @@
import {
bytesToString, isArrayBuffer, isBool, isEmptyObj, isNum, isSpace, isString,
ReadableStream, removeNullCharacters, stringToBytes, stringToPDFString
log2, ReadableStream, removeNullCharacters, stringToBytes, stringToPDFString
} from '../../src/shared/util';
describe('util', function() {
@ -136,6 +136,20 @@ describe('util', function() {
});
});
describe('log2', function() {
it('handles values smaller than/equal to zero', function() {
expect(log2(0)).toEqual(0);
expect(log2(-1)).toEqual(0);
});
it('handles values larger than zero', function() {
expect(log2(1)).toEqual(0);
expect(log2(2)).toEqual(1);
expect(log2(3)).toEqual(2);
expect(log2(3.14)).toEqual(2);
});
});
describe('stringToBytes', function() {
it('handles non-string arguments', function() {
expect(function() {