public void XmlSerializer()
        {
            string xml;

            LiveTimingFIS.LiveTimingFIS lt = new LiveTimingFIS.LiveTimingFIS();

            xml = lt.getXmlKeepAlive();
            XmlAssertion.AssertXPathExists("/livetiming/command/keepalive", xml);


            xml = lt.getXmlClearRace();
            XmlAssertion.AssertXPathExists("/livetiming/command/clear", xml);


            xml = lt.getXmlStatusUpdateInfo("test");
            XmlAssertion.AssertXPathExists("/livetiming/message", xml);
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/message", xml, "test");


            TestDataGenerator tg = new TestDataGenerator();
            var rp = tg.createRaceParticipant();
            var r  = tg.Model.GetRace(0);

            r.GetParticipant(1).Participant.Nation = "nation";
            r.GetParticipant(1).Participant.Code   = "123";
            var rr1 = r.GetRun(0);

            xml = lt.getXmlEventOnStart(r.GetParticipant(1));
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/raceevent/nextstart/@bib", xml, "1");

            xml = lt.getXmlEventStarted(r.GetParticipant(1));
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/raceevent/start/@bib", xml, "1");

            xml = lt.getXmlStartList(rr1);
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/startlist/@runno", xml, rr1.Run.ToString());
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/startlist/racer[1]/@order", xml, "1");
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/startlist/racer[1]/bib", xml, "1");
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/startlist/racer[1]/lastname", xml, r.GetParticipant(1).Name);
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/startlist/racer[1]/firstname", xml, r.GetParticipant(1).Firstname);
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/startlist/racer[1]/nat", xml, r.GetParticipant(1).Nation);
            XmlAssertion.AssertXPathEvaluatesTo("/livetiming/startlist/racer[1]/fiscode", xml, r.GetParticipant(1).Code);
        }
        public void ImportFIS_ErrorCase_DoubleImport()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.Model.AddRace(new Race.RaceProperties {
                RaceType = Race.ERaceType.DownHill, Runs = 1
            });

            var reader1 = new FISImportReader(@"FIS-points-list-AL-2022-330.xlsx");

            FISInterfaceModel fisImp = new FISInterfaceModel(tg.Model);

            fisImp.UpdateFISList(reader1);
            Assert.AreEqual("5th FIS points list 2021/2022", fisImp.UsedList);

            var reader2 = new FISImportReader(@"FIS-points-list-AL-2022-331.xlsx");

            fisImp.UpdateFISList(reader2);
            Assert.AreEqual("6th FIS points list 2021/2022", fisImp.UsedList);
        }
        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);
        }
Exemple #4
0
        public void GlobalRaceConfig_InheritToRace()
        {
            TestDataGenerator tg = new TestDataGenerator();
            var model            = tg.Model;

            var testConfig1 = new RaceConfiguration
            {
                Name            = "BaseName",
                Runs            = 2,
                DefaultGrouping = "DefaultG",
                ActiveFields    = new List <string> {
                    "eins", "zwei"
                },
                RaceResultView       = "RaceResultView",
                RaceResultViewParams = new Dictionary <string, object>(),

                Run1_StartistView         = "Run1_StartistView",
                Run1_StartistViewGrouping = "Run1_StartistViewGrouping",
                Run1_StartistViewParams   = new Dictionary <string, object>(),

                Run2_StartistView         = "Run2_StartistView",
                Run2_StartistViewGrouping = "Run2_StartistViewGrouping",
                Run2_StartistViewParams   = new Dictionary <string, object>(),

                LivetimingParams = new Dictionary <string, string> {
                    { "key", "value" }
                },

                ValueF         = 100,
                ValueA         = 200,
                MinimumPenalty = 300
            };

            model.GlobalRaceConfig = testConfig1;

            TestUtilities.AreEqualByJson(testConfig1, model.GlobalRaceConfig);
            TestUtilities.AreEqualByJson(testConfig1, model.GetRace(0).RaceConfiguration);
        }
Exemple #5
0
        public void HandTimingsVM_Dissolve()
        {
            TestDataGenerator tg = new TestDataGenerator();

            HandTimingVM htVM = new HandTimingVM(HandTimingVMEntry.ETimeModus.EStartTime);

            List <RunResult> rr1 = new List <RunResult>
            {
                tg.createRunResult(tg.createRaceParticipant(), new TimeSpan(0, 8, 0, 2), new TimeSpan(0, 8, 1, 2))
            };

            List <TimingData> hts1 = new List <TimingData>
            {
                new TimingData {
                    Time = new TimeSpan(0, 8, 0, 2, 301)
                }
            };

            htVM.AddRunResults(rr1);
            htVM.AddHandTimings(hts1);

            // Check Pre-Condition
            Assert.AreEqual(new TimeSpan(0, 8, 0, 2), htVM.Items[0].ATime);
            Assert.AreEqual(new TimeSpan(0, 8, 0, 2, 301), htVM.Items[0].HandTime);
            Assert.AreEqual(new TimeSpan(0, 0, 0, 0, 300), htVM.Items[0].HandTimeDiff);

            // Operation
            htVM.Dissolve(htVM.Items[0]);

            // Check Post-Condition
            Assert.AreEqual(new TimeSpan(0, 8, 0, 2), htVM.Items[0].ATime);
            Assert.IsNull(htVM.Items[0].HandTime);
            Assert.IsNull(htVM.Items[0].HandTimeDiff);

            Assert.IsNull(htVM.Items[1].ATime);
            Assert.AreEqual(new TimeSpan(0, 8, 0, 2, 301), htVM.Items[1].HandTime);
            Assert.IsNull(htVM.Items[1].HandTimeDiff);
        }
        public void Race_IsConsistent()
        {
            TestDataGenerator tg = new TestDataGenerator();
            Race race            = tg.Model.GetRace(0);

            // Empty race
            Assert.IsTrue(RaceUtil.IsConsistent(race));
            Assert.IsTrue(race.IsConsistent);

            // 1 Participant, no startnumber
            var rp1 = tg.createRaceParticipant();

            Assert.IsTrue(RaceUtil.IsConsistent(race));
            Assert.IsTrue(race.IsConsistent);
            rp1.StartNumber = 0;
            Assert.IsFalse(RaceUtil.IsConsistent(race));
            Assert.IsFalse(race.IsConsistent);

            // 2 Participants, no startnumber
            var rp2 = tg.createRaceParticipant();

            Assert.IsFalse(RaceUtil.IsConsistent(race));
            Assert.IsFalse(race.IsConsistent);
            rp2.StartNumber = 0;
            Assert.IsFalse(RaceUtil.IsConsistent(race));
            Assert.IsFalse(race.IsConsistent);

            // 2 Participants, same startnumber
            rp1.StartNumber = 1U;
            rp2.StartNumber = 1U;
            Assert.IsFalse(RaceUtil.IsConsistent(race));
            Assert.IsFalse(race.IsConsistent);

            // 2 Participants, different startnumber
            rp2.StartNumber = 2U;
            Assert.IsTrue(RaceUtil.IsConsistent(race));
            Assert.IsTrue(race.IsConsistent);
        }
        public void Test1()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createRaceParticipant();

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

            //Zielzeit: 12:57:49,0158
            //Startzeit: 12:57:12,5021
            //Laufzeit: 00:00:36,5137 → abgeschnitten: 36,51
            raceRun.SetStartTime(race.GetParticipant(1), createTestTime(12, 57, 12, 5021));
            raceRun.SetFinishTime(race.GetParticipant(1), createTestTime(12, 57, 49, 158));
            Assert.AreEqual(new TimeSpan(0, 0, 0, 36, 510), raceRun.GetRunResult(race.GetParticipant(1)).Runtime);

            //Zielzeit: 12:57:02,5620
            //Startzeit: 12:56:26,2246
            //Laufzeit: 00:00:36,3374 → abgeschnitten: 36,33
            raceRun.SetStartTime(race.GetParticipant(1), createTestTime(12, 56, 26, 2246));
            raceRun.SetFinishTime(race.GetParticipant(1), createTestTime(12, 57, 02, 5620));
            Assert.AreEqual(new TimeSpan(0, 0, 0, 36, 330), raceRun.GetRunResult(race.GetParticipant(1)).Runtime);
        }
Exemple #8
0
        public void StartNumberAssignment_ErrorCase_UnassignedClass()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createCatsClassesGroups();

            var participants = tg.Model.GetRace(0).GetParticipants();

            tg.createRaceParticipant();
            tg.createRaceParticipant(cat: tg.findCat('M'), cla: tg.findClass("2M (2010)"));
            tg.createRaceParticipant(cat: tg.findCat('W'), cla: tg.findClass("2W (2010)"));

            StartNumberAssignment sna = new StartNumberAssignment();
            ParticipantSelector   ps  = new ParticipantSelector(participants[0].Race, sna, null);

            Assert.IsTrue(ps.SwitchToFirstGroup());
            Assert.AreEqual("", ps.CurrentGroup);
            Assert.IsFalse(ps.SwitchToNextGroup());

            ps.GroupProperty = "Participant.Class";
            Assert.IsTrue(ps.SwitchToFirstGroup());
            Assert.AreEqual(tg.findClass("2M (2010)"), ps.CurrentGroup);
            Assert.IsTrue(ps.SwitchToNextGroup());
            Assert.AreEqual(tg.findClass("2W (2010)"), ps.CurrentGroup);
            Assert.IsTrue(ps.SwitchToNextGroup());
            Assert.AreEqual("", ps.CurrentGroup);
            Assert.IsFalse(ps.SwitchToNextGroup());

            ps.GroupProperty = "Group";
            Assert.IsTrue(ps.SwitchToFirstGroup());
            Assert.AreEqual(tg.findGroup("2M"), ps.CurrentGroup);
            Assert.IsTrue(ps.SwitchToNextGroup());
            Assert.AreEqual(tg.findGroup("2W"), ps.CurrentGroup);
            Assert.IsTrue(ps.SwitchToNextGroup());
            Assert.AreEqual("", ps.CurrentGroup);
            Assert.IsFalse(ps.SwitchToNextGroup());
        }
        public void ImportParticpantsForRace()
        {
            TestDataGenerator tg = new TestDataGenerator();

            var ir = new ImportReader(@"Teilnehmer_V1_202001301844.csv");

            RaceMapping mapping = new RaceMapping(ir.Columns);

            RaceImport im     = new RaceImport(tg.Model.GetRace(0), mapping);
            var        impRes = im.DoImport(ir.Data);

            Assert.AreEqual(153, impRes.SuccessCount);
            Assert.AreEqual(0, impRes.ErrorCount);

            for (int i = 0; i < 153; i++)
            {
                Participant     p  = tg.Model.GetParticipants()[i];
                RaceParticipant rp = tg.Model.GetRace(0).GetParticipants()[i];

                Assert.AreEqual(string.Format("Name {0}", i + 1), p.Name);
                Assert.AreEqual(string.Format("Name {0}", i + 1), rp.Name);
                Assert.IsTrue(rp.Participant == p);
            }
        }
        public void VerifyXML_Run1()
        {
            TestDataGenerator tg = new TestDataGenerator();

            fillMandatoryFields(tg.Model);

            // Run 1
            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(cat: tg.findCat('M')), new TimeSpan(0, 8, 0, 0), new TimeSpan(0, 8, 0, 2));
            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(cat: tg.findCat('M')), new TimeSpan(0, 8, 1, 0), new TimeSpan(0, 8, 1, 4));
            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(cat: tg.findCat('M')), new TimeSpan(0, 8, 2, 0), new TimeSpan(0, 8, 2, 3));
            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(cat: tg.findCat('M')), new TimeSpan(0, 8, 2, 0), null);
            tg.Model.GetRace(0).GetRun(0).SetResultCode(tg.Model.GetRace(0).GetParticipant(4), RunResult.EResultCode.NiZ);
            tg.Model.GetRace(0).GetRun(0).SetResultCode(tg.createRaceParticipant(cat: tg.findCat('M')), RunResult.EResultCode.NaS);
            tg.Model.GetRace(0).GetRun(0).SetResultCode(tg.createRaceParticipant(cat: tg.findCat('M')), RunResult.EResultCode.DIS, "Tor 2");

            // Run 2
            tg.Model.GetRace(0).GetRun(1).SetStartFinishTime(tg.Model.GetRace(0).GetParticipant(1), new TimeSpan(0, 9, 0, 0), new TimeSpan(0, 9, 0, 3));
            tg.Model.GetRace(0).GetRun(1).SetStartFinishTime(tg.Model.GetRace(0).GetParticipant(2), new TimeSpan(0, 9, 1, 0), null);
            tg.Model.GetRace(0).GetRun(1).SetResultCode(tg.Model.GetRace(0).GetParticipant(2), RunResult.EResultCode.NiZ);
            tg.Model.GetRace(0).GetRun(1).SetResultCode(tg.Model.GetRace(0).GetParticipant(3), RunResult.EResultCode.DIS, "Tor 1");

            // no eather set, check if weather is absent
            string s = exportToXML(tg.Model.GetRace(0));

            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/classified_competitors/ranked[@bib='1']/competitor/lastname", s, "Name 1");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/classified_competitors/ranked[@bib='1']/@bib", s, "1");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/classified_competitors/ranked[@bib='1']/raceresult/totaltime", s, "00:05.00");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/classified_competitors/ranked[@bib='1']/raceresult/runtime[@runnumber='1']", s, "00:02.00");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/classified_competitors/ranked[@bib='1']/raceresult/runtime[@runnumber='2']", s, "00:03.00");

            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/not_classified_competitiors/notranked[@bib='2']/@status", s, "DNF2");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/not_classified_competitiors/notranked[@bib='3']/@status", s, "DSQ2");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/not_classified_competitiors/notranked[@bib='4']/@status", s, "DNF1");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/not_classified_competitiors/notranked[@bib='5']/@status", s, "DNS1");
            XmlAssertion.AssertXPathEvaluatesTo("/dsv_alpine_raceresults/raceresults/not_classified_competitiors/notranked[@bib='6']/@status", s, "DSQ1");
        }
Exemple #11
0
        public void HandTimingVMManager_Manage1()
        {
            TestDataGenerator   tg  = new TestDataGenerator();
            HandTimingVMManager mgr = new HandTimingVMManager(tg.Model);

            var vm1S = mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EStartTime);
            var vm1F = mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EFinishTime);
            var vm2S = mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(1), HandTimingVMEntry.ETimeModus.EStartTime);
            var vm2F = mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(1), HandTimingVMEntry.ETimeModus.EFinishTime);

            Assert.IsNotNull(vm1S);
            Assert.IsNotNull(vm1F);
            Assert.IsNotNull(vm2S);
            Assert.IsNotNull(vm2F);
            Assert.AreNotEqual(vm1S, vm1F);
            Assert.AreNotEqual(vm1S, vm2S);
            Assert.AreNotEqual(vm2S, vm2F);
            Assert.AreNotEqual(vm2S, vm2F);

            Assert.AreEqual(vm1S, mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EStartTime));
            Assert.AreEqual(vm1F, mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EFinishTime));
            Assert.AreEqual(vm2S, mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(1), HandTimingVMEntry.ETimeModus.EStartTime));
            Assert.AreEqual(vm2F, mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(1), HandTimingVMEntry.ETimeModus.EFinishTime));
        }
Exemple #12
0
        public void HandTimingsVM_AssignStartNumber()
        {
            TestDataGenerator tg = new TestDataGenerator();

            HandTimingVM htVM = new HandTimingVM(HandTimingVMEntry.ETimeModus.EStartTime);

            List <RunResult> rr1 = new List <RunResult>
            {
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 1, 2))
            };

            List <TimingData> hts1 = new List <TimingData>
            {
                new TimingData {
                    Time = new TimeSpan(0, 8, 0, 2, 301)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 5, 2, 300)
                }
            };

            htVM.AddRunResults(rr1);
            htVM.AddHandTimings(hts1);

            // ***** Case 1: Merge entries ****

            // Check Pre-Condition
            Assert.IsNull(htVM.Items[0].ATime);
            Assert.AreEqual(new TimeSpan(0, 8, 0, 2, 301), htVM.Items[0].HandTime);
            Assert.IsNull(htVM.Items[0].HandTimeDiff);

            Assert.AreEqual(1U, htVM.Items[2].StartNumber);
            Assert.IsNull(htVM.Items[2].ATime);
            Assert.IsNull(htVM.Items[2].HandTime);
            Assert.IsNull(htVM.Items[2].HandTimeDiff);

            Assert.AreEqual(3, htVM.Items.Count);

            // Operation
            htVM.AssignStartNumber(htVM.Items[0], 1);

            // Check Post-Condition
            Assert.AreEqual(1U, htVM.Items[0].StartNumber);
            Assert.IsNull(htVM.Items[0].ATime);
            Assert.AreEqual(new TimeSpan(0, 8, 0, 2, 301), htVM.Items[0].HandTime);
            Assert.IsNull(htVM.Items[0].HandTimeDiff);
            Assert.IsNull(htVM.Items[0].StartTime);
            Assert.AreEqual(new TimeSpan(0, 8, 1, 2), htVM.Items[0].FinishTime);

            Assert.AreEqual(2, htVM.Items.Count);



            // ***** Case 2: Adjust entry ****

            // Check Pre-Condition
            Assert.IsNull(htVM.Items[1].StartNumber);
            Assert.IsNull(htVM.Items[1].ATime);
            Assert.AreEqual(new TimeSpan(0, 8, 5, 2, 300), htVM.Items[1].HandTime);
            Assert.IsNull(htVM.Items[1].HandTimeDiff);

            // Operation
            htVM.AssignStartNumber(htVM.Items[1], 2);

            // Check Post-Condition
            Assert.AreEqual(2U, htVM.Items[1].StartNumber);
            Assert.IsNull(htVM.Items[1].ATime);
            Assert.AreEqual(new TimeSpan(0, 8, 5, 2, 300), htVM.Items[1].HandTime);
            Assert.IsNull(htVM.Items[1].HandTimeDiff);
            Assert.IsNull(htVM.Items[1].StartTime);
            Assert.IsNull(htVM.Items[1].FinishTime);

            Assert.AreEqual(2, htVM.Items.Count);
        }
Exemple #13
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);
                    }
                }
            }
        }
Exemple #14
0
        public void HandTimingVMManager_StoreAndLoad()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(), new TimeSpan(0, 8, 0, 2), new TimeSpan(0, 8, 1, 2));
            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(), new TimeSpan(0, 8, 2, 2), new TimeSpan(0, 8, 3, 2));
            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(), new TimeSpan(0, 8, 4, 2), null);
            tg.Model.GetRace(0).GetRun(0).SetStartFinishTime(tg.createRaceParticipant(), new TimeSpan(0, 8, 6, 2), new TimeSpan(0, 8, 7, 2));


            HandTimingVMManager mgr   = new HandTimingVMManager(tg.Model);
            HandTimingVM        htVMS = mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EStartTime);
            HandTimingVM        htVMF = mgr.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EFinishTime);

            List <TimingData> hts = new List <TimingData>
            {
                new TimingData {
                    Time = new TimeSpan(0, 8, 0, 2, 100)
                },
                //new TimingData{Time = new TimeSpan(0, 8,  2, 2, 200)},
                new TimingData {
                    Time = new TimeSpan(0, 8, 4, 2, 300)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 6, 2, 400)
                }
            };

            htVMS.AddHandTimings(hts);

            List <TimingData> htf = new List <TimingData>
            {
                new TimingData {
                    Time = new TimeSpan(0, 8, 1, 2, 100)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 3, 2, 200)
                },
                //new TimingData{Time = new TimeSpan(0, 8,  5, 2, 300)},
                new TimingData {
                    Time = new TimeSpan(0, 8, 7, 2, 400)
                }
            };

            htVMF.AddHandTimings(htf);


            mgr.SaveHandTimingToFile();



            HandTimingVMManager mgr2   = new HandTimingVMManager(tg.Model);
            HandTimingVM        htVMS2 = mgr2.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EStartTime);
            HandTimingVM        htVMF2 = mgr2.GetHandTimingVM(tg.Model.GetRace(0), tg.Model.GetRace(0).GetRun(0), HandTimingVMEntry.ETimeModus.EFinishTime);

            mgr2.LoadHandTimingFromFile();

            for (int i = 0; i < htVMS2.Items.Count; i++)
            {
                Assert.AreEqual(htVMS.Items[i].HandTime, htVMS2.Items[i].HandTime);
            }
            for (int i = 0; i < htVMF2.Items.Count; i++)
            {
                Assert.AreEqual(htVMF.Items[i].HandTime, htVMF2.Items[i].HandTime);
            }
        }
Exemple #15
0
        public void HandTimingCalc_Test2()
        {
            TestDataGenerator tg   = new TestDataGenerator();
            HandTimingVM      htVM = new HandTimingVM(HandTimingVMEntry.ETimeModus.EFinishTime);

            List <RunResult> rr1 = new List <RunResult>
            {
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 0, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 1, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 2, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 3, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 4, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, null),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 6, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 7, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 8, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 9, 0)),
                tg.createRunResult(tg.createRaceParticipant(), null, new TimeSpan(0, 8, 10, 0))
            };

            List <TimingData> hts1 = new List <TimingData>
            {
                new TimingData {
                    Time = new TimeSpan(0, 8, 0, 0, 100)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 1, 0, 200)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 2, 0, 300)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 3, 0, 100)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 4, 0, 200)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 5, 0, 300)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 6, 0, 100)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 7, 0, 200)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 8, 0, 300)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 9, 0, 100)
                },
                new TimingData {
                    Time = new TimeSpan(0, 8, 10, 0, 200)
                }
            };

            htVM.AddRunResults(rr1);
            htVM.AddHandTimings(hts1);

            htVM.AssignStartNumber(htVM.Items[5], 6);

            HandTimingCalc hc = new HandTimingCalc(htVM.Items[5], htVM.Items);

            Assert.AreEqual(new TimeSpan(0, 8, 5, 0, 120), hc.CalculatedTime);
        }
        public void ImportFISParticipant()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.Model.AddRace(new Race.RaceProperties {
                RaceType = Race.ERaceType.DownHill, Runs = 1
            });

            var reader = new FISImportReader(@"FIS-points-list-AL-2022-330.xlsx");

            {
                RaceImport imp = new RaceImport(
                    tg.Model.GetRace(0),
                    reader.GetMapping(tg.Model.GetRace(0)),
                    new ClassAssignment(tg.Model.GetParticipantClasses()));

                var             row = reader.Data.Tables[0].Rows[0];
                RaceParticipant rp  = imp.ImportRow(row);
                Assert.AreEqual("10000001", rp.Code);
                Assert.AreEqual("FERRETTI", rp.Name);
                Assert.AreEqual("Jacopo", rp.Firstname);
                Assert.AreEqual(2004U, rp.Year);
                Assert.AreEqual("SKIING A.S.D.", rp.Club);
                Assert.AreEqual("ITA", rp.Nation);
                Assert.AreEqual('M', rp.Sex.Name);
                Assert.AreEqual(66.48, rp.Points); // GSpoints
            }

            {
                RaceImport imp = new RaceImport(
                    tg.Model.GetRace(1),
                    reader.GetMapping(tg.Model.GetRace(1)),
                    new ClassAssignment(tg.Model.GetParticipantClasses()));

                var             row = reader.Data.Tables[0].Rows[0];
                RaceParticipant rp  = imp.ImportRow(row);
                Assert.AreEqual("10000001", rp.Code);
                Assert.AreEqual("FERRETTI", rp.Name);
                Assert.AreEqual("Jacopo", rp.Firstname);
                Assert.AreEqual(2004U, rp.Year);
                Assert.AreEqual("SKIING A.S.D.", rp.Club);
                Assert.AreEqual("ITA", rp.Nation);
                Assert.AreEqual('M', rp.Sex.Name);
                Assert.AreEqual(145.06, rp.Points); // DHpoints
            }



            ///////////////////////////////////////////////////////////////////
            /// FISUpdatePoints.UpdatePoints
            ///////////////////////////////////////////////////////////////////

            tg.Model.GetRace(0).GetParticipants()[0].Points = -1;
            tg.Model.GetRace(1).GetParticipants()[0].Points = -1;

            Assert.AreEqual(-1.0, tg.Model.GetRace(0).GetParticipants()[0].Points); // DHpoints
            Assert.AreEqual(-1.0, tg.Model.GetRace(1).GetParticipants()[0].Points); // DHpoints

            FISInterfaceModel fisImp = new FISInterfaceModel(tg.Model);

            fisImp.UpdateFISList(reader);
            FISUpdatePoints.UpdatePoints(tg.Model, fisImp);

            Assert.AreEqual(66.48, tg.Model.GetRace(0).GetParticipants()[0].Points);  // DHpoints
            Assert.AreEqual(145.06, tg.Model.GetRace(1).GetParticipants()[0].Points); // DHpoints
        }
Exemple #17
0
        public void DSVAlpinExport()
        {
            TestDataGenerator tg = new TestDataGenerator();

            tg.createCatsClassesGroups();
            Race race = tg.Model.GetRace(0);

            var rp = tg.createRaceParticipant(cat: tg.findCat('M'), cla: tg.findClass("2M (2010)"), points: 1.0); // 1

            rp.Participant.SvId   = "123";
            rp.Participant.Year   = 2010;
            rp.Participant.Nation = "Nation";
            rp.Participant.Club   = "Verein";
            tg.createRaceParticipant(cat: tg.findCat('M'), cla: tg.findClass("2M (2010)"), points: 2.0);
            tg.createRaceParticipant(cat: tg.findCat('M'), cla: tg.findClass("2M (2010)"), points: 3.0);

            tg.createRaceParticipant(cat: tg.findCat('W'), cla: tg.findClass("2W (2010)"), points: 1.5); // 4
            tg.createRaceParticipant(cat: tg.findCat('W'), cla: tg.findClass("2W (2010)"), points: 2.5);
            tg.createRaceParticipant(cat: tg.findCat('W'), cla: tg.findClass("2W (2010)"), points: 3.5); // 6

            RaceRun rr1 = race.GetRun(0);
            RaceRun rr2 = race.GetRun(1);

            rr1.SetStartFinishTime(race.GetParticipant(1), new TimeSpan(8, 0, 0), new TimeSpan(8, 1, 0));
            rr2.SetRunTime(race.GetParticipant(1), new TimeSpan(0, 0, 2, 0, 123));

            rr1.SetRunTime(race.GetParticipant(2), new TimeSpan(0, 1, 1));
            rr1.SetResultCode(race.GetParticipant(3), RunResult.EResultCode.NiZ);

            DSVAlpinExport export = new DSVAlpinExport(tg.Model.GetRace(0));
            DataSet        ds     = export.ExportToDataSet();

            // Check Column Names
            int i = 0;

            Assert.AreEqual("Idnr", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Stnr", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("DSV-ID", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Name", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Kateg", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("JG", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("V/G", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Verein", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("LPkte", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Total", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Zeit 1", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Zeit 2", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Klasse", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("Gruppe", ds.Tables[0].Columns[i++].ColumnName);
            Assert.AreEqual("RPkte", ds.Tables[0].Columns[i++].ColumnName);

            // Check first participant
            Assert.AreEqual(1U, ds.Tables[0].Rows[0]["Stnr"]);
            Assert.AreEqual("123", ds.Tables[0].Rows[0]["DSV-ID"]);
            Assert.AreEqual("Name 1, Firstname 1", ds.Tables[0].Rows[0]["Name"]);
            Assert.AreEqual("M", ds.Tables[0].Rows[0]["Kateg"]);
            Assert.AreEqual(2010u, ds.Tables[0].Rows[0]["JG"]);
            Assert.AreEqual("Nation", ds.Tables[0].Rows[0]["V/G"]);
            Assert.AreEqual("Verein", ds.Tables[0].Rows[0]["Verein"]);
            Assert.AreEqual("1,00", ds.Tables[0].Rows[0]["LPkte"]);
            Assert.AreEqual("1:00,00", ds.Tables[0].Rows[0]["Total"]); // BestRun => 60.0
            Assert.AreEqual("1:00,00", ds.Tables[0].Rows[0]["Zeit 1"]);
            Assert.AreEqual("2:00,12", ds.Tables[0].Rows[0]["Zeit 2"]);
            Assert.AreEqual("Class 2M (2010)", ds.Tables[0].Rows[0]["Klasse"]);
            Assert.AreEqual("Group 2M", ds.Tables[0].Rows[0]["Gruppe"]);
            Assert.AreEqual("---", ds.Tables[0].Rows[0]["RPkte"]);

            // Participant 3, Run1: NIZ
            Assert.AreEqual("NIZ1", ds.Tables[0].Rows[2]["Total"]);
            Assert.AreEqual("NIZ", ds.Tables[0].Rows[2]["Zeit 1"]);
            Assert.AreEqual(DBNull.Value, ds.Tables[0].Rows[2]["Zeit 2"]);
        }
        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);
        }
        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);
        }
        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);
        }