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