public void Match_Bye() { var p1 = new Player("1", 1500); var match = new ByeMatch(p1); match.Score(); p1.Rating.Should().BeGreaterThan(1500); }
public IEnumerable <IEnumerable <Match> > BuildMatchPairs(IList <Player> players, Tournament tournament) { if (players.Count % 2 == 1) { // create bye var byePlayer = players.Where(p => !p.HadBye).OrderBy(p => p.Rating).FirstOrDefault(); var byeMatch = new ByeMatch(byePlayer); var remaining = players.Except(new List <Player> { byePlayer }).ToList(); var matches = new List <Match> { byeMatch }; foreach (var subsequentMatch in BuildMatchPairs(remaining, tournament)) { matches.AddRange(subsequentMatch); } yield return(matches); } else { for (var offset = 0; offset < players.Count / 2; offset++) { int offsetInc = 1; bool validMatch = false; Match match = null; while (!validMatch) { match = new Match { Player1 = players.ElementAt(offset), Player2 = players.ElementAt(offset + offsetInc) }; validMatch = tournament.IsValidMatch(match.Player1, match.Player2); offsetInc++; } var remaining = players.Except(match.Players).ToList(); var matches = new List <Match> { match }; foreach (var subsequentMatch in BuildMatchPairs(remaining, tournament)) { matches.AddRange(subsequentMatch); } yield return(matches); } } }