예제 #1
0
        public void RegisterScore_GetWinningPlayer()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");

            var match = new Match(player1, player2);
            match.RegisterScore(1, 2);

            Assert.AreEqual(player2, match.GetWinningPlayer());
        }
예제 #2
0
        public void IsDraw_UnEqualScore_false()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");

            var match = new Match(player1, player2);
            match.RegisterScore(1, 2);

            Assert.IsFalse(match.IsDraw());
        }
예제 #3
0
        public void GetOpponentOf_InputIsNotInMatch_Null()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");
            var player3 = new Player("dsaasdaadsa");

            var match = new Match(player1, player2);

            Assert.IsNull(match.GetOpponentOf(player3));
        }
예제 #4
0
        public void GetOpponentOf_GivesOtherPlayer()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");

            var match = new Match(player1, player2);

            Assert.AreEqual(player1, match.GetOpponentOf(player2));
            Assert.AreEqual(player2, match.GetOpponentOf(player1));
        }
예제 #5
0
        public void RegisterScore_LossesOfPlayer()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");

            var match = new Match(player1, player2);
            match.RegisterScore(1, 2);

            Assert.AreEqual(2, match.GetLossesOfPlayer(player1));
            Assert.AreEqual(1, match.GetLossesOfPlayer(player2));
        }
예제 #6
0
        public void GetPlayerPoints_1Win_3Points()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");
            var player3 = new Player("dsa");
            var player4 = new Player("dsaasda");
            var player5 = new Player("dsa");
            var player6 = new Player("dsaasda");

            var matches = new List<Match>();

            var match = new Match(player1, player2);
            match.RegisterScore(2, 0);
            matches.Add(match);

            Assert.AreEqual(3, PairingUtility.GetPlayerPoints(player1, matches));
        }
예제 #7
0
 public static bool IsMatchValid(List<Match> piMatches, Match piNewMatch)
 {
     return !piMatches.Any(m => m.Players.Contains(piNewMatch.Players[0]) && m.Players.Contains(piNewMatch.Players[1]));
 }
예제 #8
0
 public ActionResult ReportMatch(Match match)
 {
     throw new NotImplementedException();
 }
예제 #9
0
        public void RegisterScore_ScoreUpdated()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");

            var match = new Match(player1, player2);
            match.RegisterScore(1, 2);

            Assert.AreEqual(1, match.Score[0]);
            Assert.AreEqual(2, match.Score[1]);
        }
예제 #10
0
        public void RegisterScore_RegisteredIsTrue()
        {
            var player1 = new Player("dsa");
            var player2 = new Player("dsaasda");

            var match = new Match(player1, player2);
            match.RegisterScore(1, 2);

            Assert.IsTrue(match.Reported);
        }
예제 #11
0
        private void RandomPairing(List<Player> piPlayers)
        {
            var rand = new Random();
            var playersRandomOrder = piPlayers.OrderBy(a => rand.Next(int.MaxValue)).ToList();

            for (int i = 0; i + 1 < playersRandomOrder.Count(); i += 2)
            {
                var match = new Match(playersRandomOrder[i], playersRandomOrder[i + 1]);
                Matches.Add(match);
            }
        }
예제 #12
0
        private void InnerPairing(List<Match> piPreviousMatches, List<Player> players, List<Player> playersDownpaired)
        {
            var newMatches = new List<Match>();
            var playersAdded = new List<string>();

            if (players.Count >= 2)
            {
                for (int i = 0; i < players.Count; i++)
                {
                    if (PlayerHasMatch(players[i]))
                        continue;

                    if(i + 1 == players.Count)
                    {
                        playersDownpaired.AddRange(players);
                        break;
                    }

                    bool addMatch = true;
                    int opponentOffset = 1;
                    Match match = new Match(players[i], players[i + opponentOffset]);

                    while (!PairingUtility.IsMatchValid(piPreviousMatches, match) || PlayerHasMatch(players[i + opponentOffset]))
                    {
                        opponentOffset++;
                        if (i + opponentOffset >= players.Count)
                        {
                            foreach (var player in players.Where(playr => !playersAdded.Contains(playr.Id)))
                            {
                                playersDownpaired.Add(player);
                            }
                            if(newMatches.Any())
                            {
                                RedoPairing(newMatches, piPreviousMatches, players, playersDownpaired, i);
                                return;
                            }
                            addMatch = false;
                            break;
                        }
                        match = new Match(players[i], players[i + opponentOffset]);
                    }

                    if (addMatch)
                    {
                        playersAdded.Add(players[i].Id);
                        playersAdded.Add(players[i + opponentOffset].Id);
                        Matches.Add(match);
                        newMatches.Add(match);

                        if (i + 1 == players.Count)
                        {
                            foreach (var player in players.Where(playr => !playersAdded.Contains(playr.Id)))
                            {
                                playersDownpaired.Add(player);
                            }
                        }
                    }
                    else
                        break;
                }
            }
            else
            {
                playersDownpaired.AddRange(players);
            }
        }