Example #1
0
        public void MapDrivers_ThreeDrivers_FromValidData(DriverMapper mapper,
                                                          DriverCodeGenerator driverCodeGenerator,
                                                          string team, string status)
        {
            var code1 = driverCodeGenerator.Generate().Code;
            var code2 = driverCodeGenerator.Generate().Code;
            var code3 = driverCodeGenerator.Generate().Code;

            var driverDtoCollection = new List <DriverDto>
            {
                new DriverDto(code1, "John", "Read"),
                new DriverDto(code2, "Sarah", "Jones"),
                new DriverDto(code3, "Paul", "Kim")
            };

            var raceResultDto = new List <RaceResultDto>
            {
                new RaceResultDto(code1, 1, team, status),
                new RaceResultDto(code2, 2, team, status),
                new RaceResultDto(code3, 3, team, status),
            };

            var drivers = mapper.ToDriver(driverDtoCollection, raceResultDto);

            Assert.NotNull(drivers);
            Assert.Equal(3, drivers.Count);
        }
Example #2
0
        public void Duplicate_ShouldThrowArgException_WhenAddingDrivers(DriverCodeGenerator generator)
        {
            var season    = new Season(2017);
            var eventInfo = new EventInformation("Germany", "Hockenheim", 7, new DateTime(2017, 2, 3));
            var sut       = new Race(season, eventInfo);
            var code      = generator.Generate();

            Assert.Throws <ArgumentException>(() => sut.SetParticipatingDrivers(code, code));
        }
        internal void CalculateReferenceTime_AsSpecificDriver_FromRaceData(ReferenceTimeCalculator referenceTimeCalculator,
                                                                           DriverCodeGenerator driverCodeGenerator,
                                                                           LapDataGenerator lapDataGenerator,
                                                                           string team)
        {
            var(drivers, raceData) = BuildRaceData(driverCodeGenerator, lapDataGenerator, team);
            referenceTimeCalculator.SetStrategy(new SpecificDriverAverageReferenceTimeStrategy(drivers.ToArray()[2].DriverCode));
            var referenceTime = referenceTimeCalculator.Calculate(drivers, raceData);

            Assert.Equal(TimeSpan.FromSeconds(17), referenceTime.Time);
        }
Example #4
0
        public void BuildRaceTrace_ShouldThrowException_WhenDriverLookupIsNull(
            RaceTraceFactory raceTraceFactory,
            DriverCodeGenerator driverCodeGenerator)
        {
            var driverRaceData = new DriverRaceData(driverCodeGenerator.Generate());
            var raceData       = new RaceData(driverRaceData);
            var timeSpan       = TimeSpan.FromTicks(TimeSpan.TicksPerMinute);
            var referenceTime  = new ReferenceTime(timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);

            Assert.Throws <ArgumentNullException>(() => raceTraceFactory.Build(raceData, referenceTime, null));
        }
        internal void CalculateReferenceTime_AsWinnerAverage_FromRaceData(ReferenceTimeCalculator referenceTimeCalculator,
                                                                          RaceWinnerAverageReferenceTimeStrategy raceWinnerAverageReferenceTimeStrategy,
                                                                          DriverCodeGenerator driverCodeGenerator,
                                                                          LapDataGenerator lapDataGenerator,
                                                                          string team)
        {
            var(drivers, raceData) = BuildRaceData(driverCodeGenerator, lapDataGenerator, team);
            referenceTimeCalculator.SetStrategy(raceWinnerAverageReferenceTimeStrategy);
            var referenceTime = referenceTimeCalculator.Calculate(drivers, raceData);

            Assert.Equal(TimeSpan.FromSeconds(2), referenceTime.Time);
        }
Example #6
0
        public void BuildRaceTrace_ShouldThrowException_WhenReferenceTimeIsNull(
            RaceTraceFactory raceTraceFactory,
            DriverCodeGenerator driverCodeGenerator,
            string driverName)
        {
            var driverRaceData = new DriverRaceData(driverCodeGenerator.Generate());
            var raceData       = new RaceData(driverRaceData);
            var diverLookup    = new Dictionary <DriverCode, string> {
                { driverCodeGenerator.Generate(), driverName }
            };

            Assert.Throws <ArgumentNullException>(() => raceTraceFactory.Build(raceData, null, diverLookup));
        }
Example #7
0
        public void BuildRaceTrace_ShouldThrowException_WhenRaceDataIsNull(
            RaceTraceFactory raceTraceFactory,
            DriverCodeGenerator driverCodeGenerator,
            string driverName)
        {
            var timeSpan      = TimeSpan.FromTicks(TimeSpan.TicksPerMinute);
            var referenceTime = new ReferenceTime(timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);
            var diverLookup   = new Dictionary <DriverCode, string> {
                { driverCodeGenerator.Generate(), driverName }
            };

            Assert.Throws <ArgumentNullException>(() => raceTraceFactory.Build(null, referenceTime, diverLookup));
        }
Example #8
0
        public void SelectEntry_WithDriverCodeAsKey_WhenInDictionary(DriverCodeGenerator driverCodeGenerator, string stringValue)
        {
            var keyCode       = driverCodeGenerator.Generate();
            var expectedValue = "To Match";
            var dictionary    = new Dictionary <DriverCode, string>
            {
                { keyCode, expectedValue },
                { driverCodeGenerator.Generate(), stringValue },
                { driverCodeGenerator.Generate(), stringValue },
                { driverCodeGenerator.Generate(), stringValue },
            };

            var resultValue = dictionary[new DriverCode(keyCode.Code)];

            Assert.NotNull(resultValue);
            Assert.Equal(expectedValue, resultValue);
        }
Example #9
0
        public void MapToDriver_FromDto_ForSingleDriver(DriverMapper mapper, DriverCodeGenerator driverCodeGenerator, string team, string status)
        {
            var code    = driverCodeGenerator.Generate().Code;
            var drivers = new List <DriverDto> {
                new DriverDto(code, "John", "Read")
            };
            var raceResultDto = new List <RaceResultDto>
            {
                new RaceResultDto(code, 1, team, status)
            };

            var driver = mapper.ToDriver(drivers, raceResultDto).Single();

            Assert.Equal(new DriverCode(code), driver.DriverCode);
            Assert.Equal(1, driver.FinishStatus.Position);
            Assert.Equal(status, driver.FinishStatus.Status);
            Assert.Equal(team, driver.Team);
            Assert.NotNull(driver.Name);
        }
Example #10
0
        public void MapOneDriver_FromImbalancedInputData_WithRaceDataForTwoDrivers(DriverMapper mapper,
                                                                                   DriverCodeGenerator driverCodeGenerator,
                                                                                   string team, string status)
        {
            var code    = driverCodeGenerator.Generate().Code;
            var drivers = new List <DriverDto>
            {
                new DriverDto(code, "John", "Read"),
            };

            var raceResultDto = new List <RaceResultDto>
            {
                new RaceResultDto(code, 1, team, status),
                new RaceResultDto(driverCodeGenerator.Generate().Code, 2, team, status),
            };

            var driver = mapper.ToDriver(drivers, raceResultDto).Single();

            Assert.Equal(new DriverCode(code), driver.DriverCode);
            Assert.Equal("John", driver.Name.FirstName);
            Assert.Equal("Read", driver.Name.Surname);
        }
Example #11
0
        public void BuildRaceTrace_CalculatesTrace_ForSingleDriver(
            RaceTraceFactory raceTraceFactory,
            DriverCodeGenerator driverCodeGenerator,
            LapDataGenerator lapDataGenerator,
            string driverName)
        {
            var driverCode     = driverCodeGenerator.Generate();
            var driverRaceData = new DriverRaceData(driverCode);

            var laps = lapDataGenerator.GenerateLaps(4);

            foreach (var(lapTime, lapData) in laps)
            {
                driverRaceData.AddLap(lapTime, lapData);
            }

            var raceData      = new RaceData(driverRaceData);
            var timeSpan      = TimeSpan.FromTicks(TimeSpan.TicksPerMinute);
            var referenceTime = new ReferenceTime(timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);
            var diverLookup   = new Dictionary <DriverCode, string> {
                { driverCode, driverName }
            };

            var raceTrace = raceTraceFactory.Build(raceData, referenceTime, diverLookup);

            Assert.NotNull(raceTrace);
            Assert.Equal(1, raceTrace.DriverCodes.Count);

            var traceData = raceTrace.GetDataForDriver(driverCode);

            Assert.NotNull(traceData);

            var traceLapDeltas = traceData.GetAllLaps();

            Assert.Equal(4, traceLapDeltas.Count);
        }
        private (IReadOnlyCollection <Driver> Drivers, RaceData raceData) BuildRaceData(DriverCodeGenerator driverCodeGenerator,
                                                                                        LapDataGenerator lapDataGenerator,
                                                                                        string team)
        {
            var drivers = new List <Driver>
            {
                new Driver(new Name("DriverOne", "One"), driverCodeGenerator.Generate(), team,
                           new FinishStatus(new Position(1), "Finished")),
                new Driver(new Name("DriverTwo", "Two"), driverCodeGenerator.Generate(), team,
                           new FinishStatus(new Position(2), "Finished")),
                new Driver(new Name("DriverThree", "Three"), driverCodeGenerator.Generate(), team,
                           new FinishStatus(new Position(3), "Finished")),
            };

            var driverRaceData = new[]
            {
                BuildDriverRaceData(lapDataGenerator, drivers[0].DriverCode.Code,
                                    new [] { TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(3) }),
                BuildDriverRaceData(lapDataGenerator, drivers[1].DriverCode.Code,
                                    new [] { TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(11), TimeSpan.FromSeconds(12) }),
                BuildDriverRaceData(lapDataGenerator, drivers[2].DriverCode.Code,
                                    new [] { TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(17), TimeSpan.FromSeconds(19) }),
            };

            var raceData = new RaceData(driverRaceData);

            return(drivers, raceData);
        }
Example #13
0
        public void MatchDriverCode_ShouldSucceed_WhenCodeTheSame(DriverCodeGenerator driverCodeGenerator)
        {
            var driverCode = driverCodeGenerator.Generate();

            Assert.Equal(driverCode, new DriverCode(driverCode.Code));
        }
Example #14
0
        public void MapRaceData_MultipleDrivers_FromValidData(DriverLapTimesMapper mapper, DriverCodeGenerator driverCodeGenerator, LapDataGenerator lapDataGenerator)
        {
            var code1 = driverCodeGenerator.Generate();
            var code2 = driverCodeGenerator.Generate();
            var dict  = new Dictionary <string, IReadOnlyCollection <LapDto> >
            {
                { code1.Code, new List <LapDto>
                  {
                      new LapDto(lapDataGenerator.LapTimeSpan(), 1, 1),
                  } },
                { code2.Code, new List <LapDto>
                  {
                      new LapDto(lapDataGenerator.LapTimeSpan(), 1, 2),
                      new LapDto(lapDataGenerator.LapTimeSpan(), 2, 1),
                  } },
            };

            var driverLapTimes = mapper.DriverLapTimes(dict);
            var raceData       = mapper.ToRaceData(driverLapTimes);

            Assert.NotNull(raceData);
            Assert.Equal(2, raceData.DriverCodes.Count);
            Assert.Equal(2, raceData.AllDriverRaceData.Count);

            var allDriverData = raceData.AllDriverRaceData.ToArray();

            Assert.Equal(1, allDriverData[0].TotalLapCount);
            Assert.Equal(2, allDriverData[1].TotalLapCount);
        }
Example #15
0
        public void MapRaceData_SingularDriver_FromValidData(DriverLapTimesMapper mapper, DriverCodeGenerator driverCodeGenerator, LapDataGenerator lapDataGenerator)
        {
            var code = driverCodeGenerator.Generate();
            var dict = new Dictionary <string, IReadOnlyCollection <LapDto> >
            {
                { code.Code, new List <LapDto>
                  {
                      new LapDto(lapDataGenerator.LapTimeSpan(), 1, 1),
                      new LapDto(lapDataGenerator.LapTimeSpan(), 2, 1),
                      new LapDto(lapDataGenerator.LapTimeSpan(), 3, 1),
                  } }
            };

            var driverLapTimes = mapper.DriverLapTimes(dict);
            var raceData       = mapper.ToRaceData(driverLapTimes);

            Assert.NotNull(raceData);
            Assert.Equal(1, raceData.DriverCodes.Count);
            Assert.Equal(code, raceData.DriverCodes.Single());
            Assert.Equal(1, raceData.AllDriverRaceData.Count);
            Assert.Equal(3, raceData.AllDriverRaceData.Single().TotalLapCount);
            Assert.Equal(code, raceData.AllDriverRaceData.Single().DriverCode);
        }
Example #16
0
        public void MapDriverLapTime_MultipleDrivers_FromValidData(DriverLapTimesMapper mapper, DriverCodeGenerator driverCodeGenerator, LapDataGenerator lapDataGenerator)
        {
            var code1 = driverCodeGenerator.Generate();
            var code2 = driverCodeGenerator.Generate();
            var dict  = new Dictionary <string, IReadOnlyCollection <LapDto> >
            {
                { code1.Code, new List <LapDto>
                  {
                      new LapDto(lapDataGenerator.LapTimeSpan(), 1, 1),
                  } },
                { code2.Code, new List <LapDto>
                  {
                      new LapDto(lapDataGenerator.LapTimeSpan(), 1, 2),
                  } },
            };

            var driverLapTimes = mapper.DriverLapTimes(dict);

            Assert.NotNull(driverLapTimes);
            Assert.Equal(2, driverLapTimes.Count);
            Assert.True(driverLapTimes.All(x => x.LapInformation.Count == 1));
        }
Example #17
0
        public void MapDriverLapTime_SingularDriver_FromValidData(DriverLapTimesMapper mapper, DriverCodeGenerator driverCodeGenerator, LapDataGenerator lapDataGenerator)
        {
            var code = driverCodeGenerator.Generate();
            var dict = new Dictionary <string, IReadOnlyCollection <LapDto> >
            {
                { code.Code, new List <LapDto>
                  {
                      new LapDto(lapDataGenerator.LapTimeSpan(), 1, 1),
                      new LapDto(lapDataGenerator.LapTimeSpan(), 2, 1),
                      new LapDto(lapDataGenerator.LapTimeSpan(), 3, 1),
                  } }
            };

            var driverLapTimes = mapper.DriverLapTimes(dict);

            Assert.NotNull(driverLapTimes);
            Assert.Equal(1, driverLapTimes.Count);
            Assert.Equal(3, driverLapTimes.First(x => x.DriverCode == code.Code).LapInformation.Count);
            Assert.Equal(code.Code, driverLapTimes.First().DriverCode);
        }