fast-cartesian
Version:
Fast cartesian product
46 lines (32 loc) • 949 B
JavaScript
export const validateInputs=(inputs)=>{
if(!Array.isArray(inputs)){
throw new TypeError("Argument must be an array of arrays")
}
inputs.forEach(validateInput);
validateDimensions(inputs);
validateCombinations(inputs)
};
const validateInput=(input)=>{
if(!Array.isArray(input)){
throw new TypeError(`Argument must be an array: ${input}`)
}
};
const validateDimensions=({length})=>{
if(length>=MAX_DIMENSIONS){
throw new TypeError(
`Too many arrays (${length}): please use the 'big-cartesian' library instead of 'fast-cartesian'`
)
}
};
const MAX_DIMENSIONS=100;
const validateCombinations=(inputs)=>{
const size=inputs.reduce(multiplySize,1);
if(size>=MAX_SIZE){
const sizeStr=Number.isFinite(size)?` (${size.toExponential(0)})`:"";
throw new TypeError(
`Too many combinations${sizeStr}: please use the 'big-cartesian' library instead of 'fast-cartesian'`
)
}
};
const multiplySize=(size,input)=>size*input.length;
const MAX_SIZE=2**32;