// Miettimisaika, vain minuutit, esim. "5" tai "90" // Oltava kokonaisluku ja vähintään 1 minuutti private Vakiot.Miettimisaika_enum SelvitaMiettimisaikaCSV(string s) { Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_MAARITTELEMATON; int temp; // define here instead of "out int temp" for Visual Studio 2015 compatibility if (int.TryParse(s, out /*int*/ temp) == true) { if (temp < 1) { // ei voida pelata ilman miettimisaikaa // jo asetettu aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_MAARITTELEMATON; } else if (temp <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN; } else if (temp <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN; } else if (temp <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN; } else { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN; } } return(aika); }
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++; } }
// ************ TARKISTA MIETTIMISAIKA ************ // // Nämä miettimisajan valintapainikkeet ovat omana ryhmänään paneelissa // Aina on joku valittuna, joten ei voi olla virhetilannetta. private static int TarkistaMiettimisaika(Vakiot.Miettimisaika_enum aika) { int tulos = Vakiot.SYOTE_STATUS_OK; if (aika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_MAARITTELEMATON) { tulos = Vakiot.SYOTE_VIRHE_MIETTIMISAIKA_CSV; } return(tulos); }
// -------------------------------------------------------------------------------- // 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)); }
// Eri miettimisajoilla voi olla omia kertoimia private static float MaaritaLisakerroin(int selo, Vakiot.Miettimisaika_enum aika) { float f = 1.0F; // Tämä ei vaikuta uuden pelaajan SELOn laskentaan if (aika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN) { f = 0.5F; } else if (aika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN) { f = (selo < 2300) ? 0.3F : 0.15F; } return(f); }
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++; } }
// Jos tulosta ei annettu, oletus TULOS_MAARITTELEMATON public Tuple <int, Selopelaaja> Testaa(Vakiot.Miettimisaika_enum aika, string selo, string pelimaara, string vastustajat) { return(Testaa(aika, selo, pelimaara, vastustajat, Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON)); }
// - TESTATTAESSA (UnitTest1.cs) // Syotetiedot ottelu = // new Syotetiedot(Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN, "1725", "1", "1441", Vakiot.OttelunTulos_enum.TULOS_VOITTO, /*doTrim*/true); // Testattaessa doTrim=true, koska välilyöntien poistoa ei tehdä yksikkötestauksessa vaan // poiston jättäminen tänne on osa testausta. public Syotetiedot(Vakiot.Miettimisaika_enum aika1, string selo1, string pelimaara1, string vastustajat1, Vakiot.OttelunTulos_enum tulos1, bool doTrim) { // XXX: Could check arguments everywhere: arg == null or sometimes string.IsNullOrEmpty(arg) if (selo1 == null) { throw new ArgumentNullException(nameof(selo1)); } if (pelimaara1 == null) { throw new ArgumentNullException(nameof(pelimaara1)); } if (vastustajat1 == null) { throw new ArgumentNullException(nameof(vastustajat1)); } // Copy arguments, might be modified Vakiot.Miettimisaika_enum aika = aika1; string selo = String.Copy(selo1); string pelimaara = String.Copy(pelimaara1); string vastustajat = String.Copy(vastustajat1); Vakiot.OttelunTulos_enum tulos = tulos1; // If CSV format, values there will override other parameters if (vastustajat.Contains(',')) { List <string> tmp = vastustajat.Split(',').ToList(); if (tmp.Count != 2 || (tmp.Count == 2 && tmp[0].Trim().Length >= 4)) { //vastustajat = so.SiistiVastustajatKentta(vastustajat.Trim()); List <string> data = vastustajat.Split(',').ToList(); if (data.Count == 5) { aika = this.SelvitaMiettimisaikaCSV(data[0]); selo = data[1]; pelimaara = data[2]; vastustajat = data[3]; tulos = this.SelvitaTulosCSV(data[4]); } else if (data.Count == 4) { // viimeinen osa voi sisältää vastustajat tuloksineen tai jos alkuperäinen pelimäärä on enintään 10, // niin ensin lasketaan uuden pelaajan kaavalla ja loput "/"-merkin jälkeen menevät normaalilaskentaan // "90,1525,0,+1525 +1441 -1973 +1718 -1784 -1660 -1966 +1321 -1678 -1864 -1944 / -1995 +1695 -1930 1901", aika = this.SelvitaMiettimisaikaCSV(data[0]); selo = data[1]; pelimaara = data[2]; vastustajat = data[3]; tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON; } else if (data.Count == 3) { //aika = aika; selo = data[0]; pelimaara = data[1]; vastustajat = data[2]; tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON; } else if (data.Count == 2) { //aika = aika; selo = data[0]; pelimaara = ""; vastustajat = data[1]; tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON; } else { // XXX: CHECK WHAT HAPPENS HERE // XXX: Virheen pitää olla Vakiot.SYOTE_VIRHE_CSV_FORMAT //aika = aika; selo = ""; pelimaara = ""; vastustajat = ""; tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON; } // The thinking time might be needed from the form if there are 2 or 3 values in CSV format //return so.SelvitaCSV(aika, vastustajat); } } Miettimisaika = aika; // if doTrim -> remove leading and trailing white spaces AlkuperainenSelo_str = doTrim ? selo.Trim() : selo; AlkuperainenPelimaara_str = doTrim ? pelimaara.Trim() : pelimaara; if (doTrim) { SelolaskuriOperations so = new SelolaskuriOperations(); vastustajat = so.SiistiVastustajatKentta(vastustajat.Trim()); } VastustajienSelot_str = vastustajat; OttelunTulos = tulos; // Clear these too although not actually needed AlkuperainenSelo = 0; AlkuperainenPelimaara = 0; UudenPelaajanPelitEnsinLKM = 0; YksiVastustajaTulosnapit = 0; // Create en empty list for matches (opponent's selo, match result) Ottelut = new Ottelulista(); }
} // sis. vastustajien selot ja ottelutulokset // Konstruktorin käyttö: // - Lomakkeelta (SelolaskuriForm.cs) // return new Syotetiedot(HaeMiettimisaika(), selo_in.Text, pelimaara_in.Text, vastustajanSelo_comboBox.Text, HaeOttelunTulos()); // Lomakkeella doTrim=false, koska ylimääräiset välilyönnit poistetaan jo ennen kutsua, jotta // ne saadaan päivitettyä myös lomakkeen kenttiin. public Syotetiedot(Vakiot.Miettimisaika_enum aika, string selo, string pelimaara, string vastustajat, Vakiot.OttelunTulos_enum tulos) : this(aika, selo, pelimaara, vastustajat, tulos, /*doTrim*/ false) { }