public void Should_Fail_Best_Pilot_Lap() { List <Lap> bestLap = new List <Lap>(); bestLap.Add(new Lap() { LapTime = "1:02.769", LapNumber = 1 }); bestLap.Add(new Lap() { LapTime = "1:02.770", LapNumber = 2 }); bestLap.Add(new Lap() { LapTime = "1:02.771", LapNumber = 3 }); bestLap.Add(new Lap() { LapTime = "1:02.772", LapNumber = 4 }); bestLap.Add(new Lap() { LapTime = "1:02.773", LapNumber = 5 }); BestLapDetail bestLapDetail = Lap.GetBestLap(bestLap); Assert.False(bestLapDetail.LapNumber == 2, "Not a best Lap"); }
public void Should_Not_Consider_Lap_Five_As_Best_Pilot_Lap() { List <Lap> bestLap = new List <Lap>(); bestLap.Add(new Lap() { LapTime = "1:02.769", LapNumber = 1 }); bestLap.Add(new Lap() { LapTime = "1:02.770", LapNumber = 2 }); bestLap.Add(new Lap() { LapTime = "1:02.771", LapNumber = 3 }); bestLap.Add(new Lap() { LapTime = "1:02.772", LapNumber = 4 }); bestLap.Add(new Lap() { LapTime = "1:02.768", LapNumber = 5 }); BestLapDetail bestLapDetail = Lap.GetBestLap(bestLap); Assert.False(bestLapDetail.LapNumber == 5, "Best Lap could not be >5"); }
public Metrics GetRaceMetrics(StreamReader raceStreamReader) { var metrics = new Metrics(); metrics.PrincipalMetrics = new List <PrincipalMetrics>(); string line = raceStreamReader.ReadLine(); List <Lap> lapObject = new List <Lap>(); List <Lap> lapPilotList; int pilotNumber; BestLapDetail bestPilotLap; BestLapDetail bestRaceLap; List <decimal> averageSpeed; while ((line = raceStreamReader.ReadLine()) != null) { lapObject.Add(Lap.BuildLapObject(line)); } bestRaceLap = Lap.GetBestLap(lapObject); foreach (var pilotNumberIterator in lapObject.GroupBy(u => u.PilotNumber)) { pilotNumber = pilotNumberIterator.Key; lapPilotList = lapObject.Where(u => u.PilotNumber.Equals(pilotNumber)).ToList(); bestPilotLap = Lap.GetBestLap(lapPilotList); averageSpeed = lapPilotList.Select(u => u.LapAVG).ToList(); metrics.PrincipalMetrics.Add( new PrincipalMetrics() { QuantityCompletedLap = Race.GetCompletedLaps(lapPilotList), PilotTotalTime = Pilot.GetPilotTotalTime(Lap.GetTotalValidLaps(lapPilotList) .Select(u => Lap.GetTimeSpanFromLapString(u.LapTime)).ToList()), PilotNumber = Pilot.GetPilotNumber(lapPilotList), PilotName = Pilot.GetPilotName(lapPilotList), BestLap = $"Melhor volta do piloto: {bestPilotLap.LapNumber}, Tempo: {bestPilotLap.LapTime}", AverageSpeed = Pilot.GetPilotAverageSpeed(averageSpeed) }); } metrics.AdicionalMetrics = new AdicionalMetrics() { BestRaceLap = $"Melhor volta da corrida: {bestRaceLap.LapNumber}, Tempo: {bestRaceLap.LapTime}, Piloto: {bestRaceLap.Pilot}" }; Race.SetPosition(metrics.PrincipalMetrics); return(metrics); }