UNPKG

dist-javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

31 lines (25 loc) 2.15 kB
"use strict"; var _combineWithoutRepetitions = _interopRequireDefault(require("../combineWithoutRepetitions")); var _factorial = _interopRequireDefault(require("../../../math/factorial/factorial")); var _pascalTriangle = _interopRequireDefault(require("../../../math/pascal-triangle/pascalTriangle")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('combineWithoutRepetitions', () => { it('should combine string without repetitions', () => { expect((0, _combineWithoutRepetitions.default)(['A', 'B'], 3)).toEqual([]); expect((0, _combineWithoutRepetitions.default)(['A', 'B'], 1)).toEqual([['A'], ['B']]); expect((0, _combineWithoutRepetitions.default)(['A'], 1)).toEqual([['A']]); expect((0, _combineWithoutRepetitions.default)(['A', 'B'], 2)).toEqual([['A', 'B']]); expect((0, _combineWithoutRepetitions.default)(['A', 'B', 'C'], 2)).toEqual([['A', 'B'], ['A', 'C'], ['B', 'C']]); expect((0, _combineWithoutRepetitions.default)(['A', 'B', 'C'], 3)).toEqual([['A', 'B', 'C']]); expect((0, _combineWithoutRepetitions.default)(['A', 'B', 'C', 'D'], 3)).toEqual([['A', 'B', 'C'], ['A', 'B', 'D'], ['A', 'C', 'D'], ['B', 'C', 'D']]); expect((0, _combineWithoutRepetitions.default)(['A', 'B', 'C', 'D', 'E'], 3)).toEqual([['A', 'B', 'C'], ['A', 'B', 'D'], ['A', 'B', 'E'], ['A', 'C', 'D'], ['A', 'C', 'E'], ['A', 'D', 'E'], ['B', 'C', 'D'], ['B', 'C', 'E'], ['B', 'D', 'E'], ['C', 'D', 'E']]); const combinationOptions = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']; const combinationSlotsNumber = 4; const combinations = (0, _combineWithoutRepetitions.default)(combinationOptions, combinationSlotsNumber); const n = combinationOptions.length; const r = combinationSlotsNumber; const expectedNumberOfCombinations = (0, _factorial.default)(n) / ((0, _factorial.default)(r) * (0, _factorial.default)(n - r)); expect(combinations.length).toBe(expectedNumberOfCombinations); // This one is just to see one of the way of Pascal's triangle application. expect(combinations.length).toBe((0, _pascalTriangle.default)(n)[r]); }); });