예제 #1
0
        private ITabelaNaleznosciPienieznej Znajdz(ITablicaOsobPienieznych tablicaOsob, long staraRozniceDoPoczatkowej)
        {
            ITabelaNaleznosciPienieznej najlepszaTabelaNaleznosci = fabryka.StworzTabelaNaleznosciPienieznejNull();

            foreach (IOsobaSwiadczeniePieniezne osobaKorzen in tablicaOsob)
            {
                foreach (IOsobaSwiadczeniePieniezne osobaPotomek in tablicaOsob)
                {
                    INaleznoscPieniezna roznicaNaleznosci = najwiekszaMozliwaNaleznoscDoWymianyUstalacz.UstalNaleznoscDoWymiany(tablicaOsob, osobaKorzen, osobaPotomek);

                    if (roznicaNaleznosci.Swiadczenie == 0)
                    {
                        continue;
                    }

                    ITablicaOsobPienieznych nowaTablicaOsob = tablicaOsob.PrzekazNaleznosciPomiedzyOsobami(osobaKorzen, osobaPotomek, roznicaNaleznosci);

                    long rozniceDoPoczatkowej = rozniceDoStanuKwitaSumator.SumujRoznice(nowaTablicaOsob);

                    if (rozniceDoPoczatkowej >= staraRozniceDoPoczatkowej)
                    {
                        continue;
                    }

                    ITabelaNaleznosciPienieznej NowaTabelaNaleznosci = ZnajdzTabeleNaleznosciDlaNoweTablicyOsob(nowaTablicaOsob, rozniceDoPoczatkowej);

                    NowaTabelaNaleznosci.DodajWymianeNalzenosciUaktualniajacKryterium(roznicaNaleznosci,
                                                                                      fabryka.StworzPolozenieWTabeliNaleznosci(osobaPotomek.ID, osobaKorzen.ID));

                    najlepszaTabelaNaleznosci = najlepszaTabelaNaleznosci.ZwrocLepszeKryterium(NowaTabelaNaleznosci);
                }
            }

            return(najlepszaTabelaNaleznosci);
        }
예제 #2
0
        public void Czy_Zwraca_PrawidlowegoTypu_KryteriumSumyWymienionejNaleznosciPienieznej()
        {
            //Ustal i Dzialaj
            ITabelaNaleznosciPienieznej tabelaNaleznosci = Stworz_TabelaNaleznosciPienieznej.Stworz_Pusty(4, KryteriumWyboruTabeliNaleznosciWylicznik.KryteriumSumyWymienionejNaleznosci);

            //Asercja
            Assert.IsType <KryteriumSumyWymienionejNaleznosciPienieznej>(tabelaNaleznosci.KryteriumWyboruTabeliNaleznosci);
        }
예제 #3
0
        public void Czy_Zwraca_PrawidlowaWartosc(byte rozmiar)
        {
            //Ustal i Dzialaj
            ITabelaNaleznosciPienieznej tabelaNaleznosci = Stworz_TabelaNaleznosciPienieznej.Stworz_Pusty(rozmiar);

            //Asercja
            Assert.Equal(rozmiar, tabelaNaleznosci.Rozmiar);
        }
예제 #4
0
        public ITabelaNaleznosciPienieznej ZwrocLepszeKryterium(ITabelaNaleznosciPienieznej porownywanaTabela)
        {
            if (porownywanaTabela is ITabelaNaleznosciPienieznejNull)
            {
                return(this);
            }

            if (this.KryteriumWyboruTabeliNaleznosci.CzyPorownywaneKyrteriumLepsze(porownywanaTabela.KryteriumWyboruTabeliNaleznosci))
            {
                return(porownywanaTabela);
            }

            return(this);
        }
        public void Czy_UstawiaIZwraca_PrawidlowaWartosc(byte indeks_X, byte indeks_Y, int naleznoscWPolgroszach)
        {
            //Ustal
            ITabelaNaleznosciPienieznej tabelaNaleznosciPienieznej = Stworz_TabelaNaleznosciPienieznej.Stworz_Pusty();

            IPolozenieWTabeliNaleznosci polozenieWTabeli = Stworz_PolozenieWTabeliNaleznosci.Stworz(indeks_X, indeks_Y);

            INaleznoscPieniezna naleznoscOczekiwana = Stworz_NaleznoscPieniezna.Stworz(naleznoscWPolgroszach);

            //Dzialaj
            tabelaNaleznosciPienieznej.DodajWymianeNalzenosciUaktualniajacKryterium(naleznoscOczekiwana, polozenieWTabeli);

            INaleznoscPienieznaSwiadczenie naleznosc_Zwrocona = tabelaNaleznosciPienieznej[polozenieWTabeli];

            //Asercja
            Assert.Equal(naleznoscOczekiwana.Swiadczenie, naleznosc_Zwrocona.Swiadczenie);
        }
예제 #6
0
        public void Czy_Zwraca_TaSamaTabele(byte iloscOsob, int wymienionaNaleznosc, int wymienionaNaleznoscPorownywanej)
        {
            //Ustal
            ITabelaNaleznosciPienieznej tabelaNaleznosciPienieznej =
                Stworz_TabelaNaleznosciPienieznej.Stworz(wymienionaNaleznosc, iloscOsob);

            ITabelaNaleznosciPienieznej tabelaNaleznosciPienieznejPorownywana =
                Stworz_TabelaNaleznosciPienieznej_Mock.
                Stworz_TabelaNaleznosciPienieznej_KryteriumWyboruTabeliNaleznosci_WezWymienionaNaleznosc_Mock(wymienionaNaleznoscPorownywanej);

            //Dzialaj
            ITabelaNaleznosciPienieznej tabelaNaleznosciPienieznejZwrocona =
                tabelaNaleznosciPienieznej.ZwrocLepszeKryterium(tabelaNaleznosciPienieznejPorownywana);

            //Asercja
            Assert.Same(tabelaNaleznosciPienieznej, tabelaNaleznosciPienieznejZwrocona);
        }
예제 #7
0
        internal static ITabelaNaleznosciPienieznej Stworz(int sumaNaleznosciDoTabeli, byte iloscOsob = 4,
                                                           KryteriumWyboruTabeliNaleznosciWylicznik kryteriumWyboruTabeliNaleznosci = default(KryteriumWyboruTabeliNaleznosciWylicznik))
        {
            ITabelaNaleznosciPienieznej tabelaNaleznosci = Stworz_Pusty(iloscOsob, kryteriumWyboruTabeliNaleznosci);

            Random GeneratorLiczbPseudolosowych = new Random();

            for (byte indeks_X = 2; indeks_X < iloscOsob; indeks_X++)
            {
                for (byte indeks_Y = 0; indeks_Y < indeks_X; indeks_Y++)
                {
                    int komorka = GeneratorLiczbPseudolosowych.Next(sumaNaleznosciDoTabeli);

                    if (komorka > 0)
                    {
                        sumaNaleznosciDoTabeli -= komorka;

                        IPolozenieWTabeliNaleznosci polozenieWTabeli =
                            Stworz_PolozenieWTabeliNaleznosci.Stworz(indeks_X, indeks_Y);

                        tabelaNaleznosci.
                        DodajWymianeNalzenosciUaktualniajacKryterium(Stworz_NaleznoscPieniezna.Stworz(komorka), polozenieWTabeli);
                    }
                }
            }

            if (sumaNaleznosciDoTabeli > 0)
            {
                IPolozenieWTabeliNaleznosci polozenieWTabeli =
                    Stworz_PolozenieWTabeliNaleznosci.Stworz(1, 0);

                tabelaNaleznosci.
                DodajWymianeNalzenosciUaktualniajacKryterium(Stworz_NaleznoscPieniezna.Stworz(sumaNaleznosciDoTabeli), polozenieWTabeli);
            }

            return(tabelaNaleznosci);
        }
예제 #8
0
        internal static ITabelaNaleznosciPienieznej Stworz(int[][] naleznosciDoTabeliNalznosci,
                                                           KryteriumWyboruTabeliNaleznosciWylicznik kryteriumWyboruTabeliNaleznosci = default(KryteriumWyboruTabeliNaleznosciWylicznik))
        {
            byte iloscOsob = (byte)naleznosciDoTabeliNalznosci.GetLength(0);

            ITabelaNaleznosciPienieznej tabelaNaleznosci = Stworz_Pusty((byte)(iloscOsob + 1), kryteriumWyboruTabeliNaleznosci);

            for (byte indeks_X = 0; indeks_X < iloscOsob; indeks_X++)
            {
                for (byte indeks_Y = 0; indeks_Y <= indeks_X; indeks_Y++)
                {
                    int komorka = naleznosciDoTabeliNalznosci[indeks_X][indeks_Y];

                    if (komorka != 0)
                    {
                        tabelaNaleznosci.
                        DodajWymianeNalzenosciUaktualniajacKryterium(Stworz_NaleznoscPieniezna.Stworz(komorka),
                                                                     Stworz_PolozenieWTabeliNaleznosci.Stworz((byte)(indeks_X + 1), indeks_Y));
                    }
                }
            }

            return(tabelaNaleznosci);
        }
        internal static ITabelaNaleznosciPienieznej Stworz_TabelaNaleznosciPienieznej_ZwrocLepszeKryterium_ZwracajPodanyJezeliPrzeslanyPodany_Mock(
            ITabelaNaleznosciPienieznej tabelaNaleznosciDoZrocenia)
        {
            Mock <ITabelaNaleznosciPienieznej> tabelaNaleznosciPienieznej_Mock = Stworz_MockWlasciwy();

            tabelaNaleznosciPienieznej_Mock.Setup
            (
                tabela => tabela.ZwrocLepszeKryterium(It.IsAny <ITabelaNaleznosciPienieznej>())
            ).Returns
            (
                (ITabelaNaleznosciPienieznej tabelaNaleznosciPienieznej) => object.ReferenceEquals(tabelaNaleznosciPienieznej, tabelaNaleznosciDoZrocenia) ?
                tabelaNaleznosciDoZrocenia : tabelaNaleznosciPienieznej
            );

            tabelaNaleznosciPienieznej_Mock.Setup
            (
                tabela => tabela[It.IsAny <IPolozenieWTabeliNaleznosci>()]
            ).Throws
            (
                new Exception("Nie powinno zwrocic tej tabeli \"" + typeof(Stworz_TabelaNaleznosciPienieznej_Mock).ToString() + "\"")
            );

            return(tabelaNaleznosciPienieznej_Mock.Object);
        }
예제 #10
0
 public ITabelaNaleznosciPienieznej ZwrocLepszeKryterium(ITabelaNaleznosciPienieznej porownywanaTabela)
 {
     return(porownywanaTabela);
 }