even-chunks
Version:
Split an array evenly into chunks
72 lines (63 loc) • 2.11 kB
JavaScript
;
var evenChunks = require('../');
var assert = require('assert');
if (!assert.deepStrictEqual) {
assert.deepStrictEqual = assert.deepEqual; // Close enough.
}
function join(array) {
return array.map(function (a) {
return Array.prototype.slice.call(a);
}).reduce(function(a, b) {
return a.concat(b);
}, []);
}
describe('evenChunks', function() {
var chunks = [1, 2, 3, 4, 5, 6, 7];
var testArrays = [
[],
[1],
[1, 2],
[1, 2, 3, 4, 6, 7],
[1, 2, 3, 4, 6, 7, 8, 9, 10, 11],
[1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12]
];
var methods = [
undefined,
evenChunks.CONTIGUOUS,
evenChunks.PRIORITIZE_FIRST,
evenChunks.PRIORITIZE_CENTER,
evenChunks.PRIORITIZE_LAST,
evenChunks.ROUND_ROBIN
];
var types = [ Array, Uint8Array, Float32Array, Buffer ];
types.forEach(function(Type) {
methods.forEach(function(method) {
chunks.forEach(function(n) {
testArrays.forEach(function(arr) {
it('chunks an array evenly, n = ' + n +
', arr = ' + arr +
', t = ' + Type.name +
', m = ' + method, function() {
if (process.version.match(/^v0\./) && Type !== Array) {
return this.skip();
}
var instance = Type === Array ? arr.slice() : new Type(arr);
var chunked = evenChunks(instance, n, method);
var joined = join(chunked);
assert.deepStrictEqual(Array.prototype.slice.call(instance).sort(),
joined.sort());
var chunkLengths = chunked.map(function(chunk) {
return chunk.length;
}).sort().filter(function(value, index, arr) {
return arr.indexOf(value) === index;
});
assert(chunkLengths.length >= 1 && chunkLengths.length <= 2);
if (chunkLengths.length === 2) {
assert.strictEqual(chunkLengths[0] + 1, chunkLengths[1]);
}
});
});
});
});
});
});