// -------------------------------------------------------------------------------- // Lomakkeen tietojen käsittely, laskenta ja tuloksien näyttäminen // -------------------------------------------------------------------------------- // Haetaan tiedot lomakkeelta // Tarkistataan ne // Lasketaan uusi vahvuusluku ja ottelumäärä sekä muut tulokset // Näytetään tulokset // // Virhetarkastus ja laskenta erillisessä luokassa SelolaskuriOperations, // jotta niitä voidaan kutsua myös yksikkötestauksesta // private bool LaskeOttelunTulosLomakkeelta() { bool status = true; int tulos; // hakee syötetyt tekstit ja tehdyt valinnat, ei virhetarkastusta Syotetiedot syotteet = HaeSyotteetLomakkeelta(); if (syotteet == null) { NaytaVirheilmoitus(Vakiot.SYOTE_VIRHE_CSV_FORMAT); status = false; } else if ((tulos = so.TarkistaSyote(syotteet)) != Vakiot.SYOTE_STATUS_OK) { NaytaVirheilmoitus(tulos); status = false; } else { Selopelaaja tulokset = so.SuoritaLaskenta(syotteet); // Tuloksissa näytetään myös selo-muutos NaytaTulokset(tulokset); } return(status); }
public void TarkistaOttelulistaErillisinTuloksin() { // input Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN; string selo = "1525"; string pelimaara = ""; string vastustajat = "+1525 +1441 -1973 +1718 -1784 -1660 -1966 =1234 1555"; Vakiot.OttelunTulos_enum tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON; Syotetiedot s = new Syotetiedot(aika, selo, pelimaara, vastustajat, tulos); // // Check that the input was stored correctly! // Assert.AreEqual(aika, s.Miettimisaika); Assert.AreEqual(selo, s.AlkuperainenSelo_str); Assert.AreEqual(pelimaara, s.AlkuperainenPelimaara_str); Assert.AreEqual(vastustajat, s.VastustajienSelot_str); Assert.AreEqual(tulos, s.OttelunTulos); // // parse strings into numbers, create an array of opponents // int status = so.TarkistaSyote(s); Assert.AreEqual(Vakiot.SYOTE_STATUS_OK, status); int seloInt; if (int.TryParse(selo, out seloInt) == false) { Assert.AreEqual("Illegal test data (number)", selo); } Assert.AreEqual(seloInt, s.AlkuperainenSelo); Assert.AreEqual(Vakiot.PELIMAARA_TYHJA, s.AlkuperainenPelimaara); // // Tarkista ottelulista, ensin lukumäärä // string[] vastustajatStr = vastustajat.Split(' '); Assert.AreEqual(vastustajatStr.Length, s.Ottelut.Lukumaara); // Käy sitten tallennetut ottelut läpi int i = 0; Ottelulista lista = s.Ottelut; var ottelu = lista.HaeEnsimmainen(); // vastustajanSelo, ottelunTulos while (ottelu.Item2 != Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON) { Assert.AreEqual(MuodostaOttelu(ottelu.Item1, ottelu.Item2), vastustajatStr[i]); ottelu = lista.HaeSeuraava(); i++; } }
// -------------------------------------------------------------------------------- // Parametrien tarkistuksen ja laskennan testauksen apurutiinit // // Näissä kaikissa on string selo ja string vastustajat // Muiden parametrien puuttumisen varalta on useita versioita // -------------------------------------------------------------------------------- // Use old Tuple, because Visual Studio Community 2015 has older C# public Tuple <int, Selopelaaja> Testaa(Vakiot.Miettimisaika_enum aika, string selo, string pelimaara, string vastustajat, Vakiot.OttelunTulos_enum tulos) { Syotetiedot syotetiedot = new Syotetiedot(aika, selo, pelimaara, vastustajat, tulos, /*trim input strings*/ true); int status; Selopelaaja tulokset = null; if ((status = so.TarkistaSyote(syotetiedot)) == Vakiot.SYOTE_STATUS_OK) { // If the input was OK, continue and calculate // If wasn't, then tulokset is left null and error status will be returned tulokset = so.SuoritaLaskenta(syotetiedot); } return(Tuple.Create(status, tulokset)); }
public IActionResult OnPostLaskeVahvuusluku() { if (!ModelState.IsValid) { return(Page()); } // // HAE SYÖTTEET LOMAKKEELTA // Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN; if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN; } else if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN; } else if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN; } else { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN; } string selo = selo_in; string pelimaara = pelimaara_in; string vastustajat = vastustajat_in; // Virhetilanne, jos vastustajat on tyhjä (jatketaan silti vielä) if (selo == null) { selo = ""; } if (pelimaara == null) { pelimaara = ""; } if (vastustajat == null) { vastustajat = ""; } // // KÄSITTELE JA TARKISTA SYÖTE // vastustajat = vastustajat.Trim(); if (string.IsNullOrWhiteSpace(vastustajat) == false) { // poista ylimääräiset välilyönnit, korvaa yhdellä // poista myös välilyönnit pilkun molemmilta puolilta, jos on CSV-formaatti vastustajat = so.SiistiVastustajatKentta(vastustajat); // .Trim jo tehty // näytölle siistitty versio (tämä ei toimikaan näin helposti, Ajax?) vastustajat_in = vastustajat; } Syotetiedot syotetiedot = new Syotetiedot(aika, selo, pelimaara, vastustajat, Vakiot.OttelunTulos_enum.TULOS_EI_ANNETTU); int status; if ((status = so.TarkistaSyote(syotetiedot)) == Vakiot.SYOTE_STATUS_OK) { // // LASKE // Selopelaaja tulokset = so.SuoritaLaskenta(syotetiedot); //// jos on CSV, voidaan ottaa sieltä oikeasti käytetty miettimisaika //// tosin se ei päivity näytölle näin //if (aika != tulokset.Miettimisaika) //{ // miettimisaika_radiobutton_in = (int)tulokset.Miettimisaika; //} // Viimeksi lasketut tulokset talteen HttpContext.Session.SetInt32("laskettu selo", tulokset.UusiSelo); if (tulokset.UusiPelimaara > 0) { HttpContext.Session.SetInt32("laskettu uusi pelimaara", tulokset.UusiPelimaara); } else { HttpContext.Session.SetInt32("laskettu uusi pelimaara", 0); } HttpContext.Session.SetInt32("miettimisaika", miettimisaika_radiobutton_in); // // NÄYTÄ TULOKSET // // XXX: järjestä tulokset näytölle paremmin! // ViewData["TULOKSET"] = "Tulokset"; ViewData["uusi_selo_nimi"] = "Uusi vahvuusluku (" + (tulokset.Miettimisaika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN ? "PELO" : "SELO") + "): "; ViewData["uusi_selo"] = tulokset.UusiSelo; //// Muista viimeisimmät arvot lomakkeen piilotetuilla kentillä //ViewData["viimeksi_laskettu_selo"] = tulokset.UusiSelo.ToString(); //if (tulokset.UusiPelimaara > 0) // ViewData["viimeksi_laskettu_pelimaara"] = tulokset.UusiPelimaara.ToString(); //else // ViewData["viimeksi_laskettu_pelimaara"] = ""; ViewData["selomuutos"] = " Muutos: " + (tulokset.UusiSelo - tulokset.AlkuperainenSelo).ToString("+#;-#;0") + ((tulokset.MinSelo < tulokset.MaxSelo) ? " Vaihteluväli: " + tulokset.MinSelo.ToString() + " - " + tulokset.MaxSelo.ToString() : ""); if (tulokset.UusiPelimaara > 0) { ViewData["uusi_pelimaara_nimi"] = "Uusi pelimäärä: "; ViewData["uusi_pelimaara"] = tulokset.UusiPelimaara; } if (tulokset.UudenPelaajanLaskenta || tulokset.UudenPelaajanPelitLKM > 0) { ViewData["odotustulos"] = ""; ViewData["uudenpelaajanlaskenta"] = (tulokset.UudenPelaajanPelitLKM > 0) ? " (uuden pelaajan laskentaa " + tulokset.AlkuperainenPelimaara + "+" + tulokset.UudenPelaajanPelitLKM + " peliä)" : " (uuden pelaajan laskenta) "; } else { ViewData["odotustulos"] = "Odotustulos: " + (tulokset.Odotustulos / 100F).ToString("0.00"); ViewData["uudenpelaajanlaskenta"] = ""; } ViewData["turnauksentulos"] = "Turnauksen tulos: " + (tulokset.TurnauksenTulos2x / 2F).ToString("0.0") + " / " + tulokset.VastustajienLkm; // Keskivahvuus ja piste-ero // Vastustajien vahvuuslukujen keskiarvo. Kumpi, ei desimaaleja vai yksi desimaali? // oman vahvuusluvun piste-ero turnauksen keskivahvuuteen nähden // näytetään etumerkki miinus, jos turnaus on heikompi //ViewData["keskivahvuus"] = "Keskivahvuus: " + (tulokset.TurnauksenKeskivahvuus10x / 10F).ToString("0.0") + " Piste-ero: " + (Math.Abs(10*tulokset.AlkuperainenSelo - tulokset.TurnauksenKeskivahvuus10x)/10F).ToString("0.0"); ViewData["keskivahvuus"] = "Keskivahvuus: " + tulokset.TurnauksenKeskivahvuus.ToString() + " Piste-ero: " + /*Math.Abs*/ (tulokset.TurnauksenKeskivahvuus - tulokset.AlkuperainenSelo).ToString("+#;-#;0"); if (tulokset.VastustajienLkm > 1) { ViewData["vastustajat_alue"] = "Vastustajat (min-max): " + tulokset.VastustajaMin + " - " + tulokset.VastustajaMax; } ViewData["suoritusluku"] = "Suoritusluku: " + tulokset.Suoritusluku; ViewData["suorituslukuFIDE"] = " Suoritusluku FIDE: " + tulokset.SuorituslukuFIDE; ViewData["suorituslukuLineaarinen"] = "Suoritusluku lineaarinen: " + tulokset.SuorituslukuLineaarinen; } else { //// Muista viimeisimmät arvot lomakkeen piilotetuilla kentillä //if (HttpContext.Session.GetInt32("laskettu selo") != null) // ViewData["viimeksi_laskettu_selo"] = HttpContext.Session.GetInt32("laskettu selo").ToString(); //if (HttpContext.Session.GetInt32("laskettu uusi pelimaara") != null) // ViewData["viimeksi_laskettu_pelimaara"] = HttpContext.Session.GetInt32("laskettu uusi pelimaara").ToString(); // virhestatus on negatiivinen luku, hae virheteksti if (Vakiot.SYOTE_STATUS_OK >= status && status >= Vakiot.SYOTE_VIRHE_MAX) { // requires <div asp-validation-summary... > ModelState.AddModelError(string.Empty, Vakiot.SYOTE_VIRHEET_text[Math.Abs(status)]); } } return(Page()); }
public void TarkistaOttelulistaTurnauksenTuloksella() { // input Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN; string selo = "1525"; string pelimaara = ""; string vastustajat = "1.5 1525 1441 1973 1718 1784 1660 1966"; Vakiot.OttelunTulos_enum tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON; Syotetiedot s = new Syotetiedot(aika, selo, pelimaara, vastustajat, tulos); // // Check that the input was stored correctly! // Assert.AreEqual(aika, s.Miettimisaika); Assert.AreEqual(selo, s.AlkuperainenSelo_str); Assert.AreEqual(pelimaara, s.AlkuperainenPelimaara_str); Assert.AreEqual(vastustajat, s.VastustajienSelot_str); Assert.AreEqual(tulos, s.OttelunTulos); // // parse strings into numbers, create an array of opponents // int status = so.TarkistaSyote(s); Assert.AreEqual(Vakiot.SYOTE_STATUS_OK, status); int seloInt; if (int.TryParse(selo, out seloInt) == false) { Assert.AreEqual("Illegal test data (number)", selo); } Assert.AreEqual(seloInt, s.AlkuperainenSelo); Assert.AreEqual(Vakiot.PELIMAARA_TYHJA, s.AlkuperainenPelimaara); // // Tarkista ottelulista, ensin lukumäärä // // Huom! Nyt vastustajatStr sisältää myös turnauksen tuloksen, joten vähennettävä lukumäärää yhdellä // string[] vastustajatStr = vastustajat.Split(' '); Assert.AreEqual(vastustajatStr.Length - 1, s.Ottelut.Lukumaara); // Käy sitten tallennetut ottelut läpi // Huom! Koska vastustajatStr sisältää myös turnauksen tuloksen, aloitetaan indeksistä 1 int i = 1; Ottelulista lista = s.Ottelut; var ottelu = lista.HaeEnsimmainen(); // vastustajanSelo, ottelunTulos while (ottelu.Item2 != Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON) { // Koska käytetty turnauksen tulosta, niin listaan tallennettuihin otteluihin ei ole annettu tulosta Assert.AreEqual(MuodostaOttelu(ottelu.Item1, ottelu.Item2), vastustajatStr[i]); ottelu = lista.HaeSeuraava(); i++; } }