public void GetCurrentRaceResults_OneRace() { _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()); int numLaps = 5; _raceManager.NumberOfLaps = numLaps; _raceManager.StartRace(0); for (int i = 0; i < numLaps; i++) { _raceManager.AddLapResult(ip1, new TimeSpan(0, 1, 1)); _raceManager.AddLapResult(ip2, new TimeSpan(0, 1, 2)); _raceManager.AddLapResult(ip3, new TimeSpan(0, 1, 3)); } var raceResults = _raceManager.GetCurrentRaceResults(); Assert.Contains(1, raceResults.Keys); Assert.Contains(2, raceResults.Keys); Assert.Contains(3, raceResults.Keys); for (int i = 1; i <= 3; i++) { var resultsFound = raceResults.TryGetValue(i, out List <Lap> timer1Laps); Assert.True(resultsFound); for (int lap = 0; lap < numLaps; lap++) { Assert.Equal(new TimeSpan(0, 1, i), timer1Laps[lap].Time); } } }
public JsonResult GetLastRaceResultById(int id) { _logger.LogInformation("GET /GetLastRaceResultById"); ResponseObject.RaceResultByID raceResult = new ResponseObject.RaceResultByID { id = id, responseMessage = "success" }; try { if (_raceManager.GetRaceState() != RaceState.Finished) { raceResult.responseMessage = "Race is not finished."; return(Json(raceResult)); } Race lastRace = _raceManager.GetAllRaces().Last(); int placeIndex = lastRace.GetFinishedParticipants().IndexOf(id); // -1 if not found Dictionary <int, List <Lap> > raceResults = _raceManager.GetCurrentRaceResults(); bool idFound = raceResults.TryGetValue(id, out List <Lap> laps); if (placeIndex < 0 || !idFound) { raceResult.responseMessage = "ID [" + id + "] was not found."; return(Json(raceResult)); } raceResult.place = placeIndex + 1; Lap fastestLap = new Lap(0, new TimeSpan(0)); TimeSpan totalTime = new TimeSpan(); for (int i = 0; i < laps.Count; i++) { if (i == 0) { fastestLap = laps[0]; fastestLap.Number = laps[0].Number; } else if (laps[i].Time < fastestLap.Time) { fastestLap = laps[i]; } totalTime += laps[i].Time; } raceResult.overallTime = totalTime.ToString(); raceResult.overallTimeMilliseconds = totalTime.TotalMilliseconds; raceResult.fastestLap = fastestLap.Time.ToString(); raceResult.fastestLapMilliseconds = fastestLap.Time.TotalMilliseconds; raceResult.fastestLapNumber = fastestLap.Number; return(Json(raceResult)); } catch (Exception error) { _logger.LogError("RaceTimer/GetLastRaceResultById Exception: " + error.Message); raceResult.responseMessage = error.Message; return(new JsonResult(raceResult) { StatusCode = (int)HttpStatusCode.BadRequest }); } }