UNPKG

test-each

Version:

🤖 Repeat tests. Repeat tests. Repeat tests.

70 lines (41 loc) • 1.23 kB
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 };