dist-javascript-algorithms-and-data-structures
Version:
Algorithms and data-structures implemented on JavaScript
25 lines (21 loc) • 1.73 kB
JavaScript
;
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);
});
});