public void DiqualifyVM()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createRaceParticipants(10);

            var race = tg.Model.GetRace(0);
            var run  = race.GetRun(0);

            var disqualifyVM = new DiqualifyVM(run);

            // Test whether all participants are part of disqualify
            Assert.AreEqual(10, disqualifyVM.GetGridView().Count);
            foreach (var rr in disqualifyVM.GetGridView())
            {
                Assert.IsNull(rr.Runtime);
            }

            // Test for updating RunResult
            {
                run.SetRunTime(race.GetParticipant(3), new TimeSpan(0, 1, 3));
                var rr = disqualifyVM.GetGridView().First(r => r.StartNumber == 3);

                Assert.AreEqual(new TimeSpan(0, 1, 3), rr.Runtime);
            }

            // Test for delete RunResult
            {
                run.DeleteRunResult(race.GetParticipant(3));
                var rr = disqualifyVM.GetGridView().First(r => r.StartNumber == 3);
                Assert.IsNull(rr.Runtime);
            }
        }
Exemplo n.º 2
0
        public void Race_IsComplete()
        {
            TestDataGenerator tg = new TestDataGenerator();
            Race    race         = tg.Model.GetRace(0);
            RaceRun rr1          = race.GetRun(0);
            RaceRun rr2          = race.GetRun(1);

            Assert.IsFalse(rr1.IsComplete);

            tg.createRaceParticipants(1);

            Assert.IsFalse(rr1.IsComplete);
            Assert.IsFalse(rr2.IsComplete);
            Assert.IsFalse(race.IsComplete);

            rr1.SetRunTime(race.GetParticipant(1), new TimeSpan(0, 1, 0));
            Assert.IsTrue(rr1.IsComplete);
            Assert.IsFalse(rr2.IsComplete);
            Assert.IsFalse(race.IsComplete);

            rr2.SetRunTime(race.GetParticipant(1), new TimeSpan(0, 1, 0));
            Assert.IsTrue(rr1.IsComplete);
            Assert.IsTrue(rr2.IsComplete);
            Assert.IsTrue(race.IsComplete);

            rr2.DeleteRunResults();
            Assert.IsTrue(rr1.IsComplete);
            Assert.IsFalse(rr2.IsComplete);
            Assert.IsFalse(race.IsComplete);
        }
Exemplo n.º 3
0
        public void RaceRun_Timing_Scenario()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createRaceParticipants(2);

            var race = tg.Model.GetRace(0);
            var run  = race.GetRun(0);

            TestEventFired eventTesterOnTrack  = new TestEventFired(run, (r, h) => r.OnTrackChanged += h);
            TestEventFired eventTesterInFinish = new TestEventFired(run, (r, h) => r.InFinishChanged += h);

            // Initially, there aren't any results
            Assert.AreEqual(0, run.GetResultList().Count);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsFalse(run.IsOrWasOnTrack(race.GetParticipant(1)));
            Assert.IsFalse(run.HasResults());
            Assert.IsNull(eventTesterOnTrack.HasFiredAdd());
            Assert.IsNull(eventTesterInFinish.HasFiredAdd());


            // Scenario A: Start / FinishTime
            run.SetStartTime(race.GetParticipant(1), new TimeSpan(8, 0, 0));
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetResultList()[0].StartNumber);
            Assert.AreEqual(1, run.GetOnTrackList().Count);
            Assert.AreEqual(1U, run.GetOnTrackList()[0].StartNumber);
            Assert.AreEqual(1U, eventTesterOnTrack.HasFiredAdd().StartNumber);
            Assert.AreEqual(0, run.GetInFinishList().Count);
            Assert.IsNull(eventTesterInFinish.HasFiredAdd());

            run.SetFinishTime(race.GetParticipant(1), new TimeSpan(8, 1, 0));
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetResultList()[0].StartNumber);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsNull(eventTesterOnTrack.HasFiredAdd());
            Assert.AreEqual(1U, eventTesterOnTrack.HasFiredRemove().StartNumber);
            Assert.AreEqual(1, run.GetInFinishList().Count);
            Assert.AreEqual(1U, eventTesterInFinish.HasFiredAdd().StartNumber);
            Assert.IsNull(eventTesterInFinish.HasFiredRemove());

            // Scenario B: Runtime
            run.SetRunTime(race.GetParticipant(2), new TimeSpan(0, 2, 0));
            Assert.AreEqual(2, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetResultList()[0].StartNumber);
            Assert.AreEqual(2U, run.GetResultList()[1].StartNumber);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.AreEqual(2, run.GetInFinishList().Count);

            Assert.IsNull(eventTesterOnTrack.HasFiredAdd());
            Assert.IsNull(eventTesterOnTrack.HasFiredRemove());
            Assert.AreEqual(2U, eventTesterInFinish.HasFiredAdd().StartNumber);
            Assert.IsNull(eventTesterInFinish.HasFiredRemove());
        }
Exemplo n.º 4
0
        public void Race_ParticpantDeleted()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createRaceParticipants(2);

            Assert.AreEqual(2, tg.Model.GetRace(0).GetParticipants().Count);

            tg.Model.GetParticipants().RemoveAt(0);
            Assert.AreEqual(1, tg.Model.GetRace(0).GetParticipants().Count);
        }
Exemplo n.º 5
0
        public void StartNumberAssignment_ParticpantSelector3_AssignmentTest_NoPoints()
        {
            TestDataGenerator testData = new TestDataGenerator();

            var participants = testData.createRaceParticipants(20);

            // Point distribution:
            //  1..10 increasing,
            // 11..15 equal 9999.9 // = no points
            // 16..20 equal -1     // = no points
            for (int i = 0; i < participants.Count; i++)
            {
                if (i < 10)
                {
                    participants[i].Points = (double)(i + 1);
                }
                else if (i < 16)
                {
                    participants[i].Points = 9999.9;
                }
                else if (i < 20)
                {
                    participants[i].Points = -1.0;
                }
            }


            // Ascending
            {
                StartNumberAssignment sna = new StartNumberAssignment();
                ParticipantSelector   ps  = new ParticipantSelector(participants[0].Race, sna, null);
                ps.AnzahlVerlosung = 20;

                ps.AssignParticipants(participants);

                // Check:
                foreach (var a in sna.ParticipantList)
                {
                    int id = int.Parse(a.Participant.Id);

                    if (id <= 10)
                    {
                        Assert.IsTrue(a.StartNumber <= 10);
                    }
                    else if (id <= 20)
                    {
                        Assert.IsTrue(10 < a.StartNumber && a.StartNumber <= 20);
                    }
                }
            }
        }
Exemplo n.º 6
0
        public void RaceRun_IsComplete_ParticipantNotInStartlist()
        {
            TestDataGenerator tg = new TestDataGenerator();

            var race = tg.Model.GetRace(0);
            var run1 = race.GetRun(0);
            var run2 = race.GetRun(1);

            var frslVP = new FirstRunStartListViewProvider();

            frslVP.Init(race.GetParticipants());
            run1.SetStartListProvider(frslVP);

            var rVP = new RaceRunResultViewProvider();

            rVP.Init(run1, tg.Model);
            run1.SetResultViewProvider(rVP);

            var srslVP = new BasedOnResultsFirstRunStartListViewProvider(0, false);

            srslVP.Init(run1);
            run2.SetStartListProvider(srslVP);

            tg.createRaceParticipants(2);

            Assert.IsFalse(run1.IsComplete);
            //Assert.IsFalse(run2.IsComplete);

            // Run 1
            run1.SetRunTime(race.GetParticipant(1), new TimeSpan(0, 0, 0, 10, 0));
            Assert.IsFalse(run1.IsComplete);
            run1.SetResultCode(race.GetParticipant(2), RunResult.EResultCode.NaS);
            Assert.IsTrue(run1.IsComplete);

            // Run 2
            Assert.IsFalse(RaceRunUtil.IsComplete(run2));
            Assert.IsFalse(run2.IsComplete);
            run2.SetRunTime(race.GetParticipant(1), new TimeSpan(0, 0, 0, 10, 0));
            Assert.IsTrue(run2.IsComplete);
        }
Exemplo n.º 7
0
        public void StartNumberAssignment_ParticpantSelector3_AssignmentTest_100()
        {
            TestDataGenerator testData = new TestDataGenerator();

            var participants = testData.createRaceParticipants(100);

            // Point distribution based on Id:
            // 1..80 increasing,
            // 81..90: 999.9,
            // 91..100 equal 9999.9
            for (int i = 0; i < participants.Count; i++)
            {
                if (i < 80)
                {
                    participants[i].Points = (double)(i + 1);
                }
                else if (i < 90)
                {
                    participants[i].Points = 999.9;
                }
                else if (i < 100)
                {
                    participants[i].Points = 9999.9;
                }
            }


            // Ascending
            {
                StartNumberAssignment sna = new StartNumberAssignment();
                ParticipantSelector   ps  = new ParticipantSelector(participants[0].Race, sna, null);
                ps.AnzahlVerlosung = 10;

                ps.AssignParticipants(participants);

                // Check:
                foreach (var a in sna.ParticipantList)
                {
                    int id = int.Parse(a.Participant.Id);

                    if (id <= 10)
                    {
                        Assert.IsTrue(a.StartNumber <= 10);
                    }
                    else if (id <= 80)
                    {
                        Assert.IsTrue(a.StartNumber == id);
                    }
                    else if (id <= 90)
                    {
                        Assert.IsTrue(80 < a.StartNumber && a.StartNumber <= 90);
                    }
                    else if (id <= 100)
                    {
                        Assert.IsTrue(90 < a.StartNumber && a.StartNumber <= 100);
                    }
                }
            }

            // Descending
            {
                StartNumberAssignment sna = new StartNumberAssignment();
                ParticipantSelector   ps  = new ParticipantSelector(participants[0].Race, sna, null);
                ps.AnzahlVerlosung = 10;
                ps.Sorting         = new ParticipantSelector.PointsComparerDesc();

                ps.AssignParticipants(participants);

                // Check:
                foreach (var a in sna.ParticipantList)
                {
                    int id = int.Parse(a.Participant.Id);

                    if (id <= 10)
                    {
                        Assert.IsTrue(a.StartNumber == 90 - id + 1);
                    }
                    else if (id <= 80)
                    {
                        Assert.IsTrue(a.StartNumber == 90 - id + 1);
                    }
                    else if (id <= 90)
                    {
                        Assert.IsTrue(1 <= a.StartNumber && a.StartNumber <= 10); // 1..10
                    }
                    else if (id <= 100)
                    {
                        Assert.IsTrue(90 < a.StartNumber && a.StartNumber <= 100);
                    }
                }
            }
        }
Exemplo n.º 8
0
        public void ImportTimeEntryVM()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createRaceParticipants(5);
            var race = tg.Model.GetRace(0);

            ImportTimeMock importTimeMock = new ImportTimeMock();

            ImportTimeEntryVM vm = new ImportTimeEntryVM(race, importTimeMock);

            vm.AddEntry(new ImportTimeEntry(1, new TimeSpan(0, 0, 10)));

            Assert.AreEqual(1, vm.ImportEntries.Count);
            Assert.AreEqual(1U, vm.ImportEntries[0].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 10), vm.ImportEntries[0].RunTime);

            vm.AddEntry(new ImportTimeEntry(3, new TimeSpan(0, 0, 13)));
            Assert.AreEqual(2, vm.ImportEntries.Count);
            Assert.AreEqual(1U, vm.ImportEntries[0].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 10), vm.ImportEntries[0].RunTime);
            Assert.AreEqual(3U, vm.ImportEntries[1].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 13), vm.ImportEntries[1].RunTime);

            // Update startnumber 1
            importTimeMock.TriggerImportTimeEntryReceived(new ImportTimeEntry(1, new TimeSpan(0, 0, 11)));
            Assert.AreEqual(2, vm.ImportEntries.Count);
            Assert.AreEqual(3U, vm.ImportEntries[0].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 13), vm.ImportEntries[0].RunTime);
            Assert.AreEqual(1U, vm.ImportEntries[1].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 11), vm.ImportEntries[1].RunTime);

            // Add entry without participant
            importTimeMock.TriggerImportTimeEntryReceived(new ImportTimeEntry(999, new TimeSpan(0, 0, 9)));
            Assert.AreEqual(3, vm.ImportEntries.Count);
            Assert.AreEqual(3U, vm.ImportEntries[0].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 13), vm.ImportEntries[0].RunTime);
            Assert.AreEqual(1U, vm.ImportEntries[1].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 11), vm.ImportEntries[1].RunTime);
            Assert.AreEqual(999U, vm.ImportEntries[2].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 9), vm.ImportEntries[2].RunTime);

            // Add second entry without participant
            importTimeMock.TriggerImportTimeEntryReceived(new ImportTimeEntry(998, new TimeSpan(0, 0, 8)));
            Assert.AreEqual(4, vm.ImportEntries.Count);
            Assert.AreEqual(3U, vm.ImportEntries[0].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 13), vm.ImportEntries[0].RunTime);
            Assert.AreEqual(1U, vm.ImportEntries[1].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 11), vm.ImportEntries[1].RunTime);
            Assert.AreEqual(999U, vm.ImportEntries[2].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 9), vm.ImportEntries[2].RunTime);
            Assert.AreEqual(998U, vm.ImportEntries[3].StartNumber);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 8), vm.ImportEntries[3].RunTime);


            // Save to racerun, only time for real articipants should be taken over
            // StNr 1, 3 have time
            // StNr 2 doesn't have a time
            var rr1 = race.GetRun(0);

            Assert.AreEqual(null, rr1.GetRunResult(race.GetParticipant(1))?.Runtime);
            vm.Save(rr1);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 11), rr1.GetRunResult(race.GetParticipant(1)).Runtime);
            Assert.AreEqual(null, rr1.GetRunResult(race.GetParticipant(2))?.Runtime);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 13), rr1.GetRunResult(race.GetParticipant(3)).Runtime);
        }
Exemplo n.º 9
0
        public void RaceRun_RunResult()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createRaceParticipants(5);

            var race = tg.Model.GetRace(0);
            var run  = race.GetRun(0);

            // Initially, there aren't any results
            Assert.AreEqual(0, run.GetResultList().Count);
            Assert.IsFalse(run.IsOrWasOnTrack(race.GetParticipant(1)));
            Assert.IsFalse(run.HasResults());
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            run.SetStartTime(race.GetParticipant(1), new TimeSpan(8, 0, 0));
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetOnTrackList()[0].StartNumber);

            Assert.IsFalse(run.HasResults());
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            run.SetFinishTime(race.GetParticipant(1), new TimeSpan(8, 1, 1));
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            run.SetFinishTime(race.GetParticipant(1), null);
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetOnTrackList()[0].StartNumber);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            run.SetFinishTime(race.GetParticipant(1), new TimeSpan(8, 1, 1));
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(new TimeSpan(0, 1, 1), run.GetResultList()[0].Runtime);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsTrue(run.IsOrWasOnTrack(race.GetParticipant(1)));
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            Assert.IsFalse(run.IsOrWasOnTrack(race.GetParticipant(2)));
            run.SetStartFinishTime(race.GetParticipant(2), new TimeSpan(8, 2, 0), new TimeSpan(8, 3, 2));
            Assert.AreEqual(2, run.GetResultList().Count);
            Assert.AreEqual(new TimeSpan(0, 1, 2), run.GetResultList()[1].Runtime);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsTrue(run.IsOrWasOnTrack(race.GetParticipant(2)));
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);


            run.SetRunTime(race.GetParticipant(3), new TimeSpan(0, 1, 3));
            Assert.AreEqual(3, run.GetResultList().Count);
            Assert.AreEqual(new TimeSpan(0, 1, 3), run.GetResultList()[2].Runtime);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);


            run.SetResultCode(race.GetParticipant(4), RunResult.EResultCode.NaS);
            Assert.AreEqual(4, run.GetResultList().Count);
            Assert.AreEqual(null, run.GetResultList()[3].Runtime);
            Assert.AreEqual(RunResult.EResultCode.NaS, run.GetResultList()[3].ResultCode);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            run.SetResultCode(race.GetParticipant(5), RunResult.EResultCode.DIS, "Tor 5");
            Assert.AreEqual(5, run.GetResultList().Count);
            Assert.AreEqual(null, run.GetResultList()[4].Runtime);
            Assert.AreEqual(RunResult.EResultCode.DIS, run.GetResultList()[4].ResultCode);
            Assert.AreEqual("Tor 5", run.GetResultList()[4].DisqualText);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsTrue(RaceRunUtil.IsComplete(run));
            Assert.IsTrue(run.IsComplete);


            var tmp1 = run.DeleteRunResult(race.GetParticipant(1));

            Assert.AreEqual(1U, tmp1.StartNumber);
            Assert.AreEqual(4, run.GetResultList().Count);
            Assert.AreNotEqual(1U, run.GetResultList()[0].StartNumber);
            Assert.AreEqual(2U, run.GetResultList()[0].StartNumber);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);


            Assert.IsTrue(run.HasResults());
            run.DeleteRunResults();
            Assert.IsFalse(run.HasResults());
            Assert.AreEqual(0, run.GetResultList().Count);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);
        }
Exemplo n.º 10
0
        public void RaceRun_Timing_SpecialHandling_ResultCode()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createRaceParticipants(2);

            var race = tg.Model.GetRace(0);
            var run  = race.GetRun(0);

            // Initially, there aren't any results
            Assert.AreEqual(0, run.GetResultList().Count);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsFalse(run.IsOrWasOnTrack(race.GetParticipant(1)));
            Assert.IsFalse(run.HasResults());
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            // NiZ
            run.SetStartTime(race.GetParticipant(1), new TimeSpan(8, 0, 0));
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetResultList()[0].StartNumber);
            Assert.AreEqual(1, run.GetOnTrackList().Count);
            Assert.AreEqual(1U, run.GetOnTrackList()[0].StartNumber);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            run.SetResultCode(race.GetParticipant(1), RunResult.EResultCode.NiZ);
            Assert.AreEqual(1, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetResultList()[0].StartNumber);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            // ... and came later to the finish
            Assert.AreEqual(RunResult.EResultCode.NiZ, run.GetResultList().FirstOrDefault(p => p.StartNumber == 1).ResultCode);
            run.SetFinishTime(race.GetParticipant(1), new TimeSpan(8, 1, 0));
            Assert.AreEqual(RunResult.EResultCode.Normal, run.GetResultList().FirstOrDefault(p => p.StartNumber == 1).ResultCode);
            // Set NiZ again for later test
            run.SetResultCode(race.GetParticipant(1), RunResult.EResultCode.NiZ);
            Assert.AreEqual(RunResult.EResultCode.NiZ, run.GetResultList().FirstOrDefault(p => p.StartNumber == 1).ResultCode);
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);


            // NaS
            run.SetResultCode(race.GetParticipant(2), RunResult.EResultCode.NaS);
            Assert.AreEqual(2, run.GetResultList().Count);
            Assert.AreEqual(1U, run.GetResultList()[0].StartNumber);
            Assert.AreEqual(2U, run.GetResultList()[1].StartNumber);
            Assert.AreEqual(0, run.GetOnTrackList().Count);
            Assert.IsTrue(RaceRunUtil.IsComplete(run));
            Assert.IsTrue(run.IsComplete);


            // Special handling: Participant is allowed to restart and gets a new time => ResultCode shall be deleted
            Assert.AreEqual(RunResult.EResultCode.NiZ, run.GetResultList().FirstOrDefault(p => p.StartNumber == 1).ResultCode);
            run.SetStartTime(race.GetParticipant(1), new TimeSpan(9, 0, 0));
            Assert.IsNotNull(run.GetResultList().FirstOrDefault(p => p.StartNumber == 1));
            Assert.AreEqual(RunResult.EResultCode.Normal, run.GetResultList().FirstOrDefault(p => p.StartNumber == 1).ResultCode);
            Assert.IsNotNull(run.GetOnTrackList().FirstOrDefault(p => p.StartNumber == 1));
            Assert.IsFalse(RaceRunUtil.IsComplete(run));
            Assert.IsFalse(run.IsComplete);

            run.SetFinishTime(race.GetParticipant(1), new TimeSpan(9, 1, 0));
            Assert.IsNotNull(run.GetResultList().FirstOrDefault(p => p.StartNumber == 1));
            Assert.IsNull(run.GetOnTrackList().FirstOrDefault(p => p.StartNumber == 1));
            Assert.IsTrue(RaceRunUtil.IsComplete(run));
            Assert.IsTrue(run.IsComplete);

            Assert.AreEqual(RunResult.EResultCode.NaS, run.GetResultList().FirstOrDefault(p => p.StartNumber == 2).ResultCode);
            run.SetRunTime(race.GetParticipant(2), new TimeSpan(0, 1, 0));
            Assert.AreEqual(RunResult.EResultCode.Normal, run.GetResultList().FirstOrDefault(p => p.StartNumber == 2).ResultCode);
            Assert.IsTrue(RaceRunUtil.IsComplete(run));
            Assert.IsTrue(run.IsComplete);
        }