All files / array/operator cartesian.ts

100% Statements 7/7
100% Branches 0/0
100% Functions 2/2
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 241x 1x                         1x     10x   13x 6x      
import {allCombinations} from './allCombinations';
import {reshape} from './reshape';
 
export function cartesian(): [];
export function cartesian<A>(a: A[]): [A][];
export function cartesian<A, B>(a: A[], b: B[]): [A, B][][];
export function cartesian<A, B, C>(a: A[], b: B[], c: C[]): [A, B, C][][][];
export function cartesian<A, B, C, D>(a: A[], b: B[], c: C[], d: D[]): [A, B, C, D][][][][];
export function cartesian<A, B, C, D, E>(a: A[], b: B[], c: C[], d: D[], e: E[]): [A, B, C, D, E][][][][][];
export function cartesian<A, B, C, D, E, F>(a: A[], b: B[], c: C[], d: D[], e: E[], f: F[]): [A, B, C, D, E, F][][][][][];
export function cartesian<A, B, C, D, E, F, G>(a: A[], b: B[], c: C[], d: D[], e: E[], f: F[], g: G[]): [A, B, C, D, E, F, G][][][][][][];
export function cartesian<A, B, C, D, E, F, G, H>(a: A[], b: B[], c: C[], d: D[], e: E[], f: F[], g: G[], h: H[]): [A, B, C, D, E, F, G, H][][][][][][][];
export function cartesian<A, B, C, D, E, F, G, H>(a: A[], b: B[], c: C[], d: D[], e: E[], f: F[], g: G[], h: H[]): [A, B, C, D, E, F, G, H][][][][][][][];
 
export function cartesian(...arrays: unknown[][]): unknown[][] {
 
  // @ts-ignore
  const res: any[] = allCombinations(...arrays);
 
  const dimensions = arrays.map(a => a.length)
  return reshape(dimensions)(res) as any[]
}