diff --git a/src/__tests__/builtins.test.js b/src/__tests__/builtins.test.js index 7702780a..ec6f967e 100644 --- a/src/__tests__/builtins.test.js +++ b/src/__tests__/builtins.test.js @@ -14,7 +14,8 @@ const { keys, split, values, - combinations + combinations, + product } = builtIns describe('built ins', () => { @@ -190,4 +191,16 @@ describe('built ins', () => { ]) }) }) + + describe('product', () => { + it('returns correct value', () => { + expect(product([['a', 'b'], []])).toEqual([]) + expect(product([['a', 'b'], ['1', '2']])).toEqual([ + ['a', '1'], + ['a', '2'], + ['b', '1'], + ['b', '2'] + ]) + }) + }) }) diff --git a/src/builtins.js b/src/builtins.js index 159911de..289e6b7c 100644 --- a/src/builtins.js +++ b/src/builtins.js @@ -1,6 +1,7 @@ // @flow import { combinations } from '@aureooms/js-itertools/lib/map/combinations.js' +import { product } from '@aureooms/js-itertools/lib/map/product.js' type ProjectableType = Array & {[string]: mixed}; type ProjectionRuleType = number & string; @@ -93,5 +94,8 @@ export default { combinations: (r: number): Array | (string => Array>) => ( input: Array | string - ): Array> => Array.from(combinations(input, r)) + ): Array> => Array.from(combinations(input, r)), + + product: (input: Array | string): Array> => + Array.from(product(input)) }