UNPKG

dist-javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

25 lines (21 loc) 1.73 kB
"use strict"; var _combineWithRepetitions = _interopRequireDefault(require("../combineWithRepetitions")); var _factorial = _interopRequireDefault(require("../../../math/factorial/factorial")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('combineWithRepetitions', () => { it('should combine string with repetitions', () => { expect((0, _combineWithRepetitions.default)(['A'], 1)).toEqual([['A']]); expect((0, _combineWithRepetitions.default)(['A', 'B'], 1)).toEqual([['A'], ['B']]); expect((0, _combineWithRepetitions.default)(['A', 'B'], 2)).toEqual([['A', 'A'], ['A', 'B'], ['B', 'B']]); expect((0, _combineWithRepetitions.default)(['A', 'B'], 3)).toEqual([['A', 'A', 'A'], ['A', 'A', 'B'], ['A', 'B', 'B'], ['B', 'B', 'B']]); expect((0, _combineWithRepetitions.default)(['A', 'B', 'C'], 2)).toEqual([['A', 'A'], ['A', 'B'], ['A', 'C'], ['B', 'B'], ['B', 'C'], ['C', 'C']]); expect((0, _combineWithRepetitions.default)(['A', 'B', 'C'], 3)).toEqual([['A', 'A', 'A'], ['A', 'A', 'B'], ['A', 'A', 'C'], ['A', 'B', 'B'], ['A', 'B', 'C'], ['A', 'C', 'C'], ['B', 'B', 'B'], ['B', 'B', 'C'], ['B', 'C', 'C'], ['C', 'C', 'C']]); const combinationOptions = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']; const combinationSlotsNumber = 4; const combinations = (0, _combineWithRepetitions.default)(combinationOptions, combinationSlotsNumber); const n = combinationOptions.length; const r = combinationSlotsNumber; const expectedNumberOfCombinations = (0, _factorial.default)(r + n - 1) / ((0, _factorial.default)(r) * (0, _factorial.default)(n - 1)); expect(combinations.length).toBe(expectedNumberOfCombinations); }); });