예제 #1
0
        // --------------------------------------------------------------------------------
        // 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);
        }
예제 #2
0
        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++;
            }
        }
예제 #3
0
        // --------------------------------------------------------------------------------
        // 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));
        }
예제 #4
0
        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());
        }
예제 #5
0
        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++;
            }
        }