コード例 #1
0
        public void SwissResetMatchScore_FiresMatchesModifiedEvent_WithOnlyOneMatchModel()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 9; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);
            int      matchesPerRound = b.GetRound(1).Count;

            for (int n = 1; n < matchesPerRound; ++n)
            {
                b.SetMatchWinner(n, PlayerSlot.Challenger);
            }

            int matchesModified = 0;

            b.MatchesModified += delegate(object sender, BracketEventArgs e)
            {
                matchesModified += e.UpdatedMatches.Count;
            };
            b.ResetMatchScore(1);
            Assert.AreEqual(1, matchesModified);
        }
コード例 #2
0
        public void SwissAddGame_FiresMatchesModifiedEvent_WithAllMatchesAffectedAndNextRound()
        {
            int matchesModified = 0;

            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 9; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            b.MatchesModified += delegate(object sender, BracketEventArgs e)
            {
                matchesModified += e.UpdatedMatches.Count;
            };

            int matchesPerRound = b.GetRound(1).Count;

            for (int i = 0; i < 2; ++i)
            {
                for (int n = 1; n <= matchesPerRound; ++n)
                {
                    b.SetMatchWinner(n + (matchesPerRound * i), PlayerSlot.Challenger);
                }
            }
            Assert.AreEqual(2 * 2 * matchesPerRound, matchesModified);
        }
コード例 #3
0
        public void SwissResetMatches_RemovesPlayersFromAllMatchesAfterFirstRound()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 32; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);
            int      matchesPerRound = b.GetRound(1).Count;

            for (int i = 0; i < 3; ++i)
            {
                for (int n = 1; n <= matchesPerRound; ++n)
                {
                    b.SetMatchWinner(n + (i * matchesPerRound), PlayerSlot.Defender);
                }
            }

            b.ResetMatches();
            int matchesWithPlayers = 0;

            for (int n = 1; n < b.NumberOfMatches; ++n)
            {
                if (!(b.GetMatch(n).Players.Contains(null)))
                {
                    ++matchesWithPlayers;
                }
            }
            Assert.AreEqual(matchesPerRound, matchesWithPlayers);
        }
コード例 #4
0
        public void SwissResetMatchScore_ClearsAllFutureRounds()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 32; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList, PairingMethod.Slide, 3);
            int      matchesPerRound = b.GetRound(1).Count;

            for (int i = 0; i < 3; ++i)
            {
                for (int n = 1; n <= matchesPerRound; ++n)
                {
                    b.AddGame(n + (i * matchesPerRound), 1, 0, PlayerSlot.Defender);
                    b.AddGame(n + (i * matchesPerRound), 1, 0, PlayerSlot.Defender);
                }
            }

            b.ResetMatchScore(1);
            bool roundTwoHasPlayers = b.GetRound(2)
                                      .Any(m => !(m.Players.Contains(null)));

            Assert.IsFalse(roundTwoHasPlayers);
        }
コード例 #5
0
        public void SwissResetMatchScore_FiresGamesDeletedEvents_WithAllGamesInClearedRound()
        {
            int deletedGames = 0;

            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 9; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            b.GamesDeleted += delegate(object sender, BracketEventArgs e)
            {
                deletedGames += e.DeletedGameIDs.Count;
            };
            b.MatchesModified += delegate(object sender, BracketEventArgs e)
            {
                deletedGames += e.DeletedGameIDs.Count;
            };
            int matchesPerRound = b.GetRound(1).Count;

            for (int n = 1; n <= (2 + matchesPerRound); ++n)
            {
                b.AddGame(n, 2, 1, PlayerSlot.Defender);
            }

            b.ResetMatchScore(1);
            // Delete games: 1 from first match, 2 from second round (removed)
            Assert.AreEqual(1 + 2, deletedGames);
        }
コード例 #6
0
        public void SwissReplacePlayer_ReplacesPlayerIDinByesList()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 7; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            int            pId    = 50;
            Mock <IPlayer> player = new Mock <IPlayer>();

            player.Setup(p => p.Id).Returns(pId);
            b.ReplacePlayer(player.Object, 0);
            // 0-index had a first-round bye.

            List <IMatch> round1 = b.GetRound(1);

            foreach (IMatch match in round1)
            {
                b.SetMatchWinner(match.MatchNumber, PlayerSlot.Defender);
            }
            // Second round is now populated.
            // If new player was correctly added to the Byes list...
            // He will be in exactly 1 second-round match:
            List <IMatch> round2 = b.GetRound(2);

            Assert.AreEqual(1, round2.Where(m => m.Players.Select(p => p.Id).Contains(pId)).ToList().Count);
        }
コード例 #7
0
        public void SwissResetMatches_ReAddsAutowinToPlayerWithBye()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 9; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);
            int      matchesPerRound = b.GetRound(1).Count;

            for (int i = 0; i < 2; ++i)
            {
                for (int n = 1; n <= matchesPerRound; ++n)
                {
                    b.SetMatchWinner(n + (i * matchesPerRound), PlayerSlot.Defender);
                }
            }

            b.ResetMatches();
            int rIndex = b.Rankings.FindIndex(r => r.Id == b.Players[0].Id);

            Assert.AreEqual(1, b.Rankings[rIndex].Wins);
        }
コード例 #8
0
        public void SwissResetMatchScore_RecalculatesRankings_IfMatchWinIsReversed()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 33; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList, PairingMethod.Slide, 3);
            int      matchesPerRound = b.GetRound(1).Count;

            for (int n = 1; n <= matchesPerRound; ++n)
            {
                b.SetMatchWinner(n, PlayerSlot.Challenger);
            }
            for (int n = 1; n < matchesPerRound; ++n)
            {
                b.AddGame(n + matchesPerRound, 25, 15, PlayerSlot.Defender);
                b.AddGame(n + matchesPerRound, 25, 15, PlayerSlot.Defender);
            }

            b.ResetMatchScore(matchesPerRound + 1);
            Assert.AreEqual(2, b.Rankings[0].Wins);
        }
コード例 #9
0
        public void SwissCreateBracket_GeneratesDefaultNumberOfRounds()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            Assert.AreEqual(3, b.NumberOfRounds);
        }
コード例 #10
0
        public void SwissCreateBracket_GeneratesFirstRound()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            Assert.AreEqual(pList.Count / 2, b.GetRound(1).Count);
        }
コード例 #11
0
        public void SwissCreateBracket_ByePlayerGetsPointsForAWin()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 9; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            Assert.IsTrue(b.Rankings[0].Wins > 0);
        }
コード例 #12
0
        public void SwissCreateBracket_GivesFirstRoundByeToTopSeed()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 9; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 3);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            // Match(1) is Player[second] vs Player[last]
            Assert.AreEqual(b.Players[1].Id,
                            b.GetMatch(1).Players[(int)PlayerSlot.Defender].Id);
        }
コード例 #13
0
        public void SwissCreateBracket_LimitsMaxRounds()
        {
            int maxRounds = 15;

            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 7; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList, PairingMethod.Slide, 1, maxRounds);

            Assert.IsTrue(b.MaxRounds < maxRounds);
        }
コード例 #14
0
        public void SwissCreateBracket_UsesStandardSlideMatchups()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            // Match(1) is Player[0] vs Player[4]
            Assert.AreEqual(b.Players[b.NumberOfPlayers() / 2].Id,
                            b.GetMatch(1).Players[(int)PlayerSlot.Challenger].Id);
        }
コード例 #15
0
        public void AddSwissRound_PopulatesSecondRoundWhenFirstFinishes()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket      b      = new SwissBracket(pList);
            List <IMatch> round1 = b.GetRound(1);

            foreach (IMatch match in round1)
            {
                b.SetMatchWinner(match.MatchNumber, PlayerSlot.Defender);
            }
            Assert.IsFalse(b.GetRound(2).Select(m => m.Players).Contains(null));
        }
コード例 #16
0
        public void AddSwissRound_GivesSecondRoundByeToTopSeed_ButDoesntRepeatBye()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 5; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);
            int      firstRoundMatches = b.NumberOfMatches;

            for (int n = 1; n <= firstRoundMatches; ++n)
            {
                b.AddGame(n, 0, 1, PlayerSlot.Challenger);
            }

            Assert.AreNotEqual(b.Players[0].Id, b.Rankings[0].Id);
        }
コード例 #17
0
        public void AddSwissRound_MatchesWinnersAgainstEachOther()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);
            int      firstRoundMatches = b.NumberOfMatches;

            for (int n = 1; n <= firstRoundMatches; ++n)
            {
                b.AddGame(n, 0, 1, PlayerSlot.Challenger);
            }

            Assert.IsTrue(b.GetMatch(1).Players[(int)(b.GetMatch(1).WinnerSlot)].Id == b.GetMatch(4).Players[(int)PlayerSlot.Defender].Id &&
                          b.GetMatch(2).Players[(int)(b.GetMatch(2).WinnerSlot)].Id == b.GetMatch(4).Players[(int)PlayerSlot.Challenger].Id);
        }
コード例 #18
0
        public void SwissUpdateGame_ResetsNextRound_IfMatchWinnerChanges()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 9; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);
            int      matchesPerRound = b.GetRound(1).Count;

            for (int n = 1; n <= matchesPerRound; ++n)
            {
                b.AddGame(n, 10, 5, PlayerSlot.Defender);
            }
            b.SetMatchWinner(matchesPerRound + 1, PlayerSlot.Challenger);

            b.UpdateGame(1, 1, 5, 15, PlayerSlot.Challenger);
            Assert.IsFalse(b.GetMatch(matchesPerRound + 1).IsFinished);
        }
コード例 #19
0
        public void SwissResetMatchScore_DeletesFollowingRound_IfMatchWinIsReversed()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 32; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList, PairingMethod.Slide, 3);
            int      matchesPerRound = b.NumberOfMatches;

            for (int n = 1; n <= matchesPerRound; ++n)
            {
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
            }

            b.ResetMatchScore(matchesPerRound);
            Assert.AreEqual(matchesPerRound, b.NumberOfMatches);
        }
コード例 #20
0
        public void SwissCreateBracket_AddsPlayersOnlyToFirstRound()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new SwissBracket(pList);

            List <int> roundsWithPlayers = new List <int>();

            for (int r = 1; r < b.NumberOfRounds; ++r)
            {
                if (b.GetRound(r).Any(m => m.Players.Contains(null)))
                {
                    break;
                }
                roundsWithPlayers.Add(r);
            }
            Assert.AreEqual(1, roundsWithPlayers.Count);
        }
コード例 #21
0
        public void SwissCtor_Constructs()
        {
            IBracket b = new SwissBracket();

            Assert.IsInstanceOfType(b, typeof(SwissBracket));
        }
コード例 #22
0
        public void SwissCtor_ThrowsNull_WithNullParameter()
        {
            IBracket b = new SwissBracket(null, PairingMethod.Slide, 1);

            Assert.AreEqual(1, 2);
        }
コード例 #23
0
        public void SwissCtor_CreatesNoMatches_WithLessThanTwoPlayers()
        {
            IBracket b = new SwissBracket();

            Assert.AreEqual(0, b.NumberOfMatches);
        }