using NUnit.Framework; using OE.ALGA.Adatszerkezetek; namespace OE.ALGA.Tesztek.Adatszerkezetek { [TestFixture(Category = "Adatszerkezetek", TestName = "12 - Csúcs Mátrix Súlyozott Gráf Tesztek")] public class CsucsMatrixSulyozottGrafTesztek { [TestCase] public void MindenCsucsTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(2); Assert.Multiple(() => { Assert.That(csg.Csucsok.Eleme(0), Is.True); Assert.That(csg.Csucsok.Eleme(1), Is.True); }); } [TestCase] public void MindenElTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(3); csg.UjEl(0, 1, 1.0f); csg.UjEl(0, 2, 2.0f); csg.UjEl(1, 2, 3.0f); Assert.Multiple(() => { Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(0, 0, 0.0f)), Is.False); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(0, 1, 1.0f)), Is.True); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(0, 2, 2.0f)), Is.True); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(1, 0, 0.0f)), Is.False); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(1, 1, 0.0f)), Is.False); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(1, 2, 3.0f)), Is.True); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(2, 0, 0.0f)), Is.False); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(2, 1, 0.0f)), Is.False); Assert.That(csg.Elek.Eleme(new SulyozottEgeszGrafEl(2, 2, 0.0f)), Is.False); }); } [TestCase] public void VezetElTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(2); Assert.That(csg.VezetEl(0, 1), Is.False); csg.UjEl(0, 1, 1.0f); Assert.Multiple(() => { Assert.That(csg.VezetEl(0, 1), Is.True); Assert.That(csg.VezetEl(1, 0), Is.False); }); } [TestCase] public void SzomszedsagTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(3); csg.UjEl(0, 1, 1.0f); csg.UjEl(0, 2, 1.0f); csg.UjEl(1, 2, 1.0f); Halmaz a_szomszedai = csg.Szomszedai(0); Halmaz b_szomszedai = csg.Szomszedai(1); Halmaz c_szomszedai = csg.Szomszedai(2); Assert.Multiple(() => { Assert.That(a_szomszedai.Eleme(0), Is.False); Assert.That(a_szomszedai.Eleme(1), Is.True); Assert.That(a_szomszedai.Eleme(2), Is.True); Assert.That(b_szomszedai.Eleme(0), Is.False); Assert.That(b_szomszedai.Eleme(1), Is.False); Assert.That(b_szomszedai.Eleme(2), Is.True); Assert.That(c_szomszedai.Eleme(0), Is.False); Assert.That(c_szomszedai.Eleme(1), Is.False); Assert.That(c_szomszedai.Eleme(2), Is.False); }); } [TestCase] public void NemLetezoElTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(3); csg.UjEl(0, 1, 1.0f); csg.UjEl(0, 2, 1.0f); Assert.Throws(() => csg.Suly(1, 0)); } [TestCase] public void ElSulyTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(3); csg.UjEl(0, 1, 2.0f); csg.UjEl(0, 2, 3.0f); float szum = 0.0f; csg.Elek.Bejar(x => szum += csg.Suly(x.Honnan, x.Hova)); Assert.That(szum, Is.EqualTo(5.0f)); } } [TestFixture(Category = "Adatszerkezetek", TestName = "12 - Gráf Min Feszítőfa Tesztek")] public class GrafMinFeszitofaTesztek { [TestCase] public void KisPrimTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(3); csg.UjEl(0, 1, 10.0f); csg.UjEl(0, 2, 20.0f); csg.UjEl(1, 2, 5.0f); Szotar elek = FeszitofaKereses.Prim(csg, 0); Assert.Multiple(() => { Assert.That(elek.Kiolvas(1), Is.EqualTo(0)); Assert.That(elek.Kiolvas(2), Is.EqualTo(1)); }); } [TestCase] public void NagyPrimTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(5); csg.UjEl(0, 1, 5.0f); csg.UjEl(0, 3, 4.0f); csg.UjEl(1, 0, 5.0f); csg.UjEl(1, 3, 2.0f); csg.UjEl(1, 2, 1.0f); csg.UjEl(2, 1, 1.0f); csg.UjEl(2, 3, 3.0f); csg.UjEl(2, 4, 4.0f); csg.UjEl(3, 0, 4.0f); csg.UjEl(3, 1, 2.0f); csg.UjEl(3, 2, 3.0f); csg.UjEl(3, 4, 1.0f); csg.UjEl(4, 2, 4.0f); csg.UjEl(4, 3, 1.0f); Szotar elek = FeszitofaKereses.Prim(csg, 0); float sum = 0.0f; csg.Csucsok.Bejar(x => { if (x != 0) { int p = elek.Kiolvas(x); sum += csg.Suly(p, x); } } ); Assert.That(sum, Is.EqualTo(8.0f)); } [TestCase] public void KisKruskalTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(3); csg.UjEl(0, 1, 10.0f); csg.UjEl(0, 2, 20.0f); csg.UjEl(1, 2, 5.0f); Halmaz elek = FeszitofaKereses.Kruskal(csg); Assert.Multiple(() => { Assert.That(elek.Eleme(new SulyozottEgeszGrafEl(0, 1, 10.0f)), Is.True); Assert.That(elek.Eleme(new SulyozottEgeszGrafEl(0, 2, 20.0f)), Is.False); Assert.That(elek.Eleme(new SulyozottEgeszGrafEl(1, 2, 5.0f)), Is.True); }); } [TestCase] public void NagyKruskalTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(5); csg.UjEl(0, 1, 5.0f); csg.UjEl(0, 3, 4.0f); csg.UjEl(1, 0, 5.0f); csg.UjEl(1, 3, 2.0f); csg.UjEl(1, 2, 1.0f); csg.UjEl(2, 1, 1.0f); csg.UjEl(2, 3, 3.0f); csg.UjEl(2, 4, 4.0f); csg.UjEl(3, 0, 4.0f); csg.UjEl(3, 1, 2.0f); csg.UjEl(3, 2, 3.0f); csg.UjEl(3, 4, 1.0f); csg.UjEl(4, 2, 4.0f); csg.UjEl(4, 3, 1.0f); Halmaz elek = FeszitofaKereses.Kruskal(csg); float sum = 0.0f; elek.Bejar(x => { sum += x.Suly; } ); Assert.That(sum, Is.EqualTo(8.0f)); } } [TestFixture(Category = "Adatszerkezetek", TestName = "12 - Gráf Útkeresés Tesztek")] public class GrafUtkeresesTesztek { [TestCase] public void DijkstraKicsiGrafTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(3); csg.UjEl(0, 1, 10.0f); csg.UjEl(0, 2, 20.0f); Szotar hossz = Utkereses.Dijkstra(csg, 0); Assert.Multiple(() => { Assert.That(hossz.Kiolvas(0), Is.EqualTo(0.0f)); Assert.That(hossz.Kiolvas(1), Is.EqualTo(10.0f)); Assert.That(hossz.Kiolvas(2), Is.EqualTo(20.0f)); }); csg.UjEl(1, 2, 5.0f); hossz = Utkereses.Dijkstra(csg, 0); Assert.Multiple(() => { Assert.That(hossz.Kiolvas(0), Is.EqualTo(0.0f)); Assert.That(hossz.Kiolvas(1), Is.EqualTo(10.0f)); Assert.That(hossz.Kiolvas(2), Is.EqualTo(15.0f)); }); } [TestCase] public void DijkstraJegyzetGrafTeszt() { CsucsmatrixSulyozottEgeszGraf csg = new CsucsmatrixSulyozottEgeszGraf(7); csg.UjEl(0, 1, 1.0f); csg.UjEl(0, 3, 2.0f); csg.UjEl(0, 4, 4.0f); csg.UjEl(1, 0, 1.0f); csg.UjEl(1, 3, 2.0f); csg.UjEl(1, 2, 9.0f); csg.UjEl(2, 1, 9.0f); csg.UjEl(2, 3, 5.0f); csg.UjEl(2, 5, 1.0f); csg.UjEl(3, 0, 2.0f); csg.UjEl(3, 1, 2.0f); csg.UjEl(3, 2, 5.0f); csg.UjEl(3, 5, 3.0f); csg.UjEl(5, 2, 1.0f); csg.UjEl(5, 3, 3.0f); csg.UjEl(5, 6, 3.0f); csg.UjEl(6, 5, 3.0f); Szotar hossz = Utkereses.Dijkstra(csg, 1); Assert.Multiple(() => { Assert.That(hossz.Kiolvas(0), Is.EqualTo(1.0f)); Assert.That(hossz.Kiolvas(1), Is.EqualTo(0.0f)); Assert.That(hossz.Kiolvas(2), Is.EqualTo(6.0f)); Assert.That(hossz.Kiolvas(3), Is.EqualTo(2.0f)); Assert.That(hossz.Kiolvas(4), Is.EqualTo(5.0f)); Assert.That(hossz.Kiolvas(5), Is.EqualTo(5.0f)); Assert.That(hossz.Kiolvas(6), Is.EqualTo(8.0f)); }); } } }