Exemple #1
0
        public void AddLapResult_RaceFinishesAfterMaxLapsWithMultipleTimers()
        {
            int numberOflaps = 5;

            _raceManager.WaitForAllCarsToFinishDuration = 10000;
            _raceManager.SetMaxParticipants(3);
            var ip1 = IPAddress.Parse("1.1.1.1");
            var ip2 = IPAddress.Parse("2.2.2.2");
            var ip3 = IPAddress.Parse("3.3.3.3");

            _raceManager.Register(ip1.ToString());
            _raceManager.Register(ip2.ToString());
            _raceManager.Register(ip3.ToString());

            _raceManager.NumberOfLaps = numberOflaps;
            _raceManager.StartRace(0);

            for (int i = 0; i < numberOflaps - 1; i++)
            {
                _raceManager.AddLapResult(ip3, new TimeSpan(0, 1, i - 1));
                _raceManager.AddLapResult(ip2, new TimeSpan(0, 1, i));
                _raceManager.AddLapResult(ip1, new TimeSpan(0, 1, i + 1));
                Assert.Equal(RaceState.InProgress, _raceManager.GetRaceState());
            }

            _raceManager.AddLapResult(ip3, new TimeSpan(0, 1, 1)); // first car finishes
            Assert.Equal(RaceState.FinishCountdown, _raceManager.GetRaceState());
            _raceManager.AddLapResult(ip1, new TimeSpan(0, 1, 2));
            Assert.Equal(RaceState.FinishCountdown, _raceManager.GetRaceState());
            _raceManager.AddLapResult(ip2, new TimeSpan(0, 1, 3)); // last car finishes
            Assert.Equal(RaceState.Finished, _raceManager.GetRaceState());
            var finishedIds = _raceManager.GetFinishedParticipantsForLastRace();

            // assert finished order
            Assert.Equal(3, finishedIds[0]);
            Assert.Equal(1, finishedIds[1]);
            Assert.Equal(2, finishedIds[2]);
        }