mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
Add helpers.math._factorize (#6360)
* Add helpers.math._factorize * Remove duplicate test statement
This commit is contained in:
parent
fb3d6ab93c
commit
dd6e007ac1
34
src/helpers/helpers.math.js
Normal file
34
src/helpers/helpers.math.js
Normal file
@ -0,0 +1,34 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* @alias Chart.helpers.math
|
||||
* @namespace
|
||||
*/
|
||||
var exports = {
|
||||
/**
|
||||
* Returns an array of factors sorted from 1 to sqrt(value)
|
||||
* @private
|
||||
*/
|
||||
_factorize: function(value) {
|
||||
var result = [];
|
||||
var sqrt = Math.sqrt(value);
|
||||
var i;
|
||||
|
||||
for (i = 1; i < sqrt; i++) {
|
||||
if (value % i === 0) {
|
||||
result.push(i);
|
||||
result.push(value / i);
|
||||
}
|
||||
}
|
||||
if (sqrt === (sqrt | 0)) { // if value is a square number
|
||||
result.push(sqrt);
|
||||
}
|
||||
|
||||
result.sort(function(a, b) {
|
||||
return a - b;
|
||||
}).pop();
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = exports;
|
||||
@ -4,3 +4,4 @@ module.exports = require('./helpers.core');
|
||||
module.exports.easing = require('./helpers.easing');
|
||||
module.exports.canvas = require('./helpers.canvas');
|
||||
module.exports.options = require('./helpers.options');
|
||||
module.exports.math = require('./helpers.math');
|
||||
|
||||
@ -6,6 +6,7 @@ var helpers = require('../helpers/index');
|
||||
var Scale = require('../core/core.scale');
|
||||
|
||||
var valueOrDefault = helpers.valueOrDefault;
|
||||
var factorize = helpers.math._factorize;
|
||||
|
||||
// Integer constants are from the ES6 spec.
|
||||
var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
|
||||
@ -15,42 +16,42 @@ var INTERVALS = {
|
||||
millisecond: {
|
||||
common: true,
|
||||
size: 1,
|
||||
steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]
|
||||
steps: factorize(1000)
|
||||
},
|
||||
second: {
|
||||
common: true,
|
||||
size: 1000,
|
||||
steps: [1, 2, 5, 10, 15, 30]
|
||||
steps: factorize(60)
|
||||
},
|
||||
minute: {
|
||||
common: true,
|
||||
size: 60000,
|
||||
steps: [1, 2, 5, 10, 15, 30]
|
||||
steps: factorize(60)
|
||||
},
|
||||
hour: {
|
||||
common: true,
|
||||
size: 3600000,
|
||||
steps: [1, 2, 3, 6, 12]
|
||||
steps: factorize(24)
|
||||
},
|
||||
day: {
|
||||
common: true,
|
||||
size: 86400000,
|
||||
steps: [1, 2, 5]
|
||||
steps: factorize(10)
|
||||
},
|
||||
week: {
|
||||
common: false,
|
||||
size: 604800000,
|
||||
steps: [1, 2, 3, 4]
|
||||
steps: factorize(4)
|
||||
},
|
||||
month: {
|
||||
common: true,
|
||||
size: 2.628e9,
|
||||
steps: [1, 2, 3]
|
||||
steps: factorize(12)
|
||||
},
|
||||
quarter: {
|
||||
common: false,
|
||||
size: 7.884e9,
|
||||
steps: [1, 2, 3, 4]
|
||||
steps: factorize(4)
|
||||
},
|
||||
year: {
|
||||
common: true,
|
||||
|
||||
16
test/specs/helpers.math.tests.js
Normal file
16
test/specs/helpers.math.tests.js
Normal file
@ -0,0 +1,16 @@
|
||||
'use strict';
|
||||
|
||||
describe('Chart.helpers.math', function() {
|
||||
var factorize = Chart.helpers.math._factorize;
|
||||
|
||||
it('should factorize', function() {
|
||||
expect(factorize(1000)).toEqual([1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500]);
|
||||
expect(factorize(60)).toEqual([1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30]);
|
||||
expect(factorize(30)).toEqual([1, 2, 3, 5, 6, 10, 15]);
|
||||
expect(factorize(24)).toEqual([1, 2, 3, 4, 6, 8, 12]);
|
||||
expect(factorize(12)).toEqual([1, 2, 3, 4, 6]);
|
||||
expect(factorize(4)).toEqual([1, 2]);
|
||||
expect(factorize(-1)).toEqual([]);
|
||||
expect(factorize(2.76)).toEqual([]);
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user