UNPKG

equipator

Version:

Build the fairest team based on each player score

82 lines (73 loc) 2.99 kB
/* globals describe it */ const assert = require('assert') const { getBestCombinations } = require('../') const players = [ { nick: 'alvaro', name: 'Álvaro Crespo', score: 3.5, gk: false }, { nick: 'chalo', name: 'Gonzalo García', score: 4.0, gk: true }, { nick: 'claudio', name: 'Claudio Graiño', score: 4.0, gk: false }, { nick: 'diego', name: 'Diego Kenny', score: 3.6, gk: false }, { nick: 'puma', name: 'Ezequiel Erbaro', score: 3.6, gk: false }, { nick: 'gonchu', name: 'Gonzalo Beviglia', score: 3.4, gk: false }, { nick: 'guasho', score: 3.8, gk: false }, { nick: 'gus', name: 'Gustavo Báez', score: 2.7, gk: true }, { nick: 'juan', name: 'Juan Barreneche', score: 2.8, gk: false }, { nick: 'leanucci', name: 'Leandro Marcucci', score: 3.5, gk: false }, { nick: 'juanlg', score: 3.2, gk: false }, { nick: 'licha', name: 'Nicolás Gleichgerrcht', score: 2.0, gk: false }, { nick: 'luk', name: 'Lucas Vidal', score: 3.0, gk: false }, { nick: 'magui', name: 'Magdalena Barrenese', score: 2.5, gk: false }, { nick: 'marianf', name: 'Mariano Fernandez', score: 2.1, gk: false }, { nick: 'marianoc', name: 'Mariano C.', score: 2.5, gk: false }, { nick: 'mati', name: '', score: 3.7, gk: false }, { nick: 'miauro', name: '', score: 4.1, gk: true }, { nick: 'nicoc', name: '', score: 4.5, gk: false }, { nick: 'nicoa', name: '', score: 3.1, gk: false }, { nick: 'nicor', name: '', score: 3.5, gk: false }, { nick: 'rivi', name: '', score: 3.1, gk: false }, { nick: 'rodri', name: '', score: 3.1, gk: false }, { nick: 'roma', name: '', score: 2.7, gk: false }, { nick: 'santi', name: '', score: 3.0, gk: false }, { nick: 'tano', name: '', score: 3.0, gk: false }, { nick: 'tast', name: '', score: 3.0, gk: false }, { nick: 'jose', name: '', score: 3.0, gk: false }, { nick: 'js', name: '', score: 3.1, gk: false } ] describe('Possible combinations', () => { const combinations = getBestCombinations(players.slice(0, 10)) it('first combination is the best', done => { const first = combinations[0] assert(combinations.every(({ diff }) => Math.abs(diff) >= Math.abs(first.diff))) done() }) }) describe('Best combination', () => { const { team1, team2 } = getBestCombinations(players.slice(0, 10))[0] it('each team has 5 players', done => { assert.equal(team1.players.length, 5) assert.equal(team2.players.length, 5) done() }) it('each team has one goalkeeper', done => { assert.equal(team1.players.filter(({ gk }) => gk).length, 1) assert.equal(team2.players.filter(({ gk }) => gk).length, 1) done() }) it('fails if I provide 9 players', done => { try { getBestCombinations(players.slice(0, 9)) assert.fail() } catch (e) { assert(e) } done() }) it('fails if I provide 11 players', done => { try { getBestCombinations(players.slice(0, 11)) assert.fail() } catch (e) { assert(e) } done() }) })