コード例 #1
0
        private int GetPlayersPosition(Player player)
        {
            var indexOfPlayer = OrderedPlayers.IndexOf(player);
            if (indexOfPlayer == 0)
            {
                return 1;
            }

            if (indexOfPlayer == 1
                && player.Points == OrderedPlayers.First().Points
                && player.PointsPerGame == OrderedPlayers.First().PointsPerGame)
            {
                return 1;
            }
            else if (indexOfPlayer == 1)
            {
                return 2;
            }

            var previousPlayer = OrderedPlayers.ElementAt(indexOfPlayer - 1);

            if (previousPlayer.Points == player.Points && previousPlayer.PointsPerGame == player.PointsPerGame)
            {
                return GetPlayersPosition(previousPlayer);
            }
            else
            {
                return indexOfPlayer + 1;
            }
        }
コード例 #2
0
        public string ComputeDisplayedPosition(IOrderedEnumerable<Player> orderedPlayers, Player currentPlayer)
        {
            OrderedPlayers = orderedPlayers.ToList();

            var indexOfPlayer = OrderedPlayers.IndexOf(currentPlayer);

            if (indexOfPlayer == 0)
            {
                return GetPlayersPosition(currentPlayer).ToString();
            }

            var previousPlayer = OrderedPlayers.ElementAt(indexOfPlayer - 1);

            if (currentPlayer.Points == previousPlayer.Points && currentPlayer.PointsPerGame == previousPlayer.PointsPerGame)
            {
                return string.Format("= {0}", GetPlayersPosition(currentPlayer));
            }

            return GetPlayersPosition(currentPlayer).ToString();
        }
コード例 #3
0
        public PositionCalculatorTests()
        {
            positionCalculator = new PlayerPositionCalculator();

            player1 = new Player()
            {
                Id = 1,
                Name = "player1",
                Points = 3,
                GamesPlayed = 3
            };

            player2 = new Player()
            {
                Id = 2,
                Name = "player2",
                Points = 3,
                GamesPlayed = 3
            };

            player3 = new Player()
            {
                Id = 3,
                Name = "player3",
                Points = 3,
                GamesPlayed = 6
            };

            player4 = new Player()
            {
                Id = 4,
                Name = "player4",
                Points = 3,
                GamesPlayed = 6
            };

            orderedPlayers = new List<Player>() { player1, player2, player3, player4 }
                .OrderBy(p => p.Name)
                .OrderByDescending(p=>p.PointsPerGame)
                .OrderByDescending(p=>p.Points);
        }
コード例 #4
0
        public void GenerateTeams_GivenFourPlayers_PerfectSolutionsExist_PerfectSolutionFound(
            int p1, int g1,
            int p2, int g2,
            int p3, int g3,
            int p4, int g4)
        {
            IShuffler shuffler = A.Fake<IShuffler>();
            TeamGenerator teamGenerator = new TeamGenerator(shuffler);

            Player player1 = new Player() { Id = 1, Name = "Name1", Points = p1, GamesPlayed = g1 };
            Player player2 = new Player() { Id = 2, Name = "Name2", Points = p2, GamesPlayed = g2 };
            Player player3 = new Player() { Id = 3, Name = "Name3", Points = p3, GamesPlayed = g3 };
            Player player4 = new Player() { Id = 4, Name = "Name4", Points = p4, GamesPlayed = g4 };

            List<Player> selectedPlayers = new List<Player> { player1, player2, player3, player4 };

            var result = teamGenerator.GenerateTeams(selectedPlayers);

            result.Item1.Sum(p => p.PointsPerGame).Should().Be(1);
            result.Item2.Sum(p => p.PointsPerGame).Should().Be(1);
        }
コード例 #5
0
        public void GenerateTeams_GivenThreePlayers_PerfectSolutionsExist_PerfectSolutionFound(
            int p1, int g1,
            int p2, int g2,
            int p3, int g3)
        {
            IShuffler shuffler = A.Fake<IShuffler>();
            TeamGenerator teamGenerator = new TeamGenerator(shuffler);

            Player player1 = new Player() { Id = 1, Name = "Name1", Points = p1, GamesPlayed = g1 };
            Player player2 = new Player() { Id = 2, Name = "Name2", Points = p2, GamesPlayed = g2 };
            Player player3 = new Player() { Id = 3, Name = "Name3", Points = p3, GamesPlayed = g3 };

            List<Player> selectedPlayers = new List<Player> { player1, player2, player3 };

            var result = teamGenerator.GenerateTeams(selectedPlayers);
            var r1 = (double)p1 / g1;
            var r2 = (double)p2 / g2;
            var r3 = (double)p3 / g3;
            double expected = (r1 + r2 + r3) / 2;

            result.Item1.Sum(p => p.PointsPerGame).Should().Be(expected);
            result.Item2.Sum(p => p.PointsPerGame).Should().Be(expected);
        }