test-each
Version:
🤖 Repeat tests. Repeat tests. Repeat tests.
70 lines (41 loc) • 1.23 kB
JavaScript
import bigCartesian from"big-cartesian";
import{fixDuplicates}from"./duplicate.js";
import{callFuncs,normalizeFunc}from"./func.js";
import{unwrapIndexes,wrapIndexes}from"./indexes.js";
import{parseInputs,validateInputs}from"./input.js";
import{addRepeat}from"./repeat.js";
import{addTitles,joinTitles}from"./title.js";
export const each=(...inputs)=>{
const[inputsA,func]=parseInputs(inputs);
const inputsB=inputsA.map(normalizeInput);
for(const[info,...values]of forEachLoop(inputsB)){
func(info,...values)
}
};
export const iterable=function*(...inputs){
validateInputs(inputs);
const inputsA=inputs.map(normalizeInput);
yield*forEachLoop(inputsA)
};
const normalizeInput=(input)=>{
const inputA=addRepeat(input);
const inputB=addTitles(inputA);
const inputC=fixDuplicates(inputB);
const inputD=normalizeFunc(inputC);
const inputE=wrapIndexes(inputD);
return inputE
};
const forEachLoop=function*(inputs){
let index=-1;
for(const loop of bigCartesian(inputs)){
index+=1;
const{values,...info}=normalizeLoop(loop,index);
yield[info,...values]
}
};
const normalizeLoop=(loop,index)=>{
const loopA=unwrapIndexes(loop,index);
const loopB=callFuncs(loopA);
const loopC=joinTitles(loopB);
return loopC
};