public void TestEinzelstrecke() { var target = new VerbindungsErzeugung(new FahrplanProviderMock()); this.results = new List<Verbindung>(); target.OnVerbindung += MerkeVerbindungInListe; Strecke s = new Strecke(); s.Linienname = "U1"; s.Zielhaltestellenname = "H2"; Pfad pfad = new Pfad(); pfad.Starthaltestellenname = "H1"; pfad.Strecken = new Strecke[1]; pfad.Strecken[0] = s; target.Verbindugen_zu_Pfad_bilden(pfad, Time(9, 0)); Assert.AreEqual(1, this.results.Count); var res = this.results[0]; Assert.AreEqual("H1", res.Pfad.Starthaltestellenname); Assert.AreEqual(1, res.Pfad.Strecken.Length); Assert.AreEqual("H2", res.Pfad.Strecken[0].Zielhaltestellenname); Assert.AreEqual(1, res.Fahrtzeiten.Length); Assert.AreEqual(Time(9, 0), res.Fahrtzeiten[0].Abfahrtszeit); Assert.AreEqual(Time(9, 2), res.Fahrtzeiten[0].Ankunftszeit); }
/// <summary> /// Aus Pfaden Verbindungen bilden. /// </summary> /// <param name="pfad"> /// The pfad. /// </param> /// <param name="startzeit"> /// The startzeit. /// </param> public void Verbindugen_zu_Pfad_bilden(Pfad pfad, DateTime startzeit) { if (this.OnVerbindung == null) { throw new InvalidOperationException("Event OnVerbindung is not specified."); } if (pfad == null) { this.OnVerbindung(null); return; } foreach (var verbindungOhneZeit in this.Verbindungenerzeugen(pfad)) { var verbindungMitZeit = this.FahrzeitenZuordnen(verbindungOhneZeit); if (verbindungMitZeit == null) { continue; } var verbindungEingeschraenkt = this.EinschraenkenNachFahrzeit(verbindungMitZeit, startzeit); if (verbindungEingeschraenkt == null) { continue; } this.OnVerbindung(verbindungEingeschraenkt); } }
public Pfad ErstellePfad() { var pfad = new Pfad() { Starthaltestellenname = this.Starthaltestelle.Name, Strecken = GetStreckenArray() }; return pfad; }
/// <summary> /// Erzeugt die Verbindungen aus den gegebenen Pfaden. /// </summary> /// <param name="pfad"> /// The pfad. /// </param> /// <returns> /// The <see cref="Verbindung"/>. /// </returns> internal IEnumerable<Verbindung> Verbindungenerzeugen(Pfad pfad) { var linienName = pfad.Strecken.First().Linienname; var startHalteStelle = pfad.Starthaltestellenname; var abfahrtszeiten = this.fahrplanProvider.Abfahrtszeiten_bei_Haltestelle(linienName, startHalteStelle); foreach (var zeit in abfahrtszeiten) { var verbindung = new Verbindung { Pfad = pfad, Fahrtzeiten = new Fahrtzeit[pfad.Strecken.Length] }; for (int i = 0; i < pfad.Strecken.Length; i++) { verbindung.Fahrtzeiten[i] = new Fahrtzeit(); } // Startzeit der Verbindung ist nur hier bekannt verbindung.Fahrtzeiten[0].Abfahrtszeit = zeit; yield return verbindung; } }
public void TestNullEvent() { var target = new VerbindungsErzeugung(new FahrplanProviderMock()); this.results = new List<Verbindung>(); Strecke s = new Strecke(); s.Linienname = "U1"; s.Zielhaltestellenname = "H2"; Pfad p = new Pfad(); p.Starthaltestellenname = "H1"; p.Strecken = new Strecke[1]; p.Strecken[0] = s; target.Verbindugen_zu_Pfad_bilden(p, Time(8, 0)); }
public void TestZweiStreckenMehrereVerbindungen() { var target = new VerbindungsErzeugung(new FahrplanProviderMock()); this.results = new List<Verbindung>(); target.OnVerbindung += MerkeVerbindungInListe; Pfad pfad = new Pfad(); pfad.Starthaltestellenname = "H1"; pfad.Strecken = new Strecke[2]; Strecke s = new Strecke(); s.Linienname = "U1"; s.Zielhaltestellenname = "H2"; pfad.Strecken[0] = s; s = new Strecke(); s.Linienname = "U3"; s.Zielhaltestellenname = "H3"; pfad.Strecken[1] = s; target.Verbindugen_zu_Pfad_bilden(pfad, Time(8, 40)); Assert.AreEqual(3, this.results.Count); Assert.AreEqual(Time(8, 48), this.results[0].Fahrtzeiten[1].Ankunftszeit); Assert.AreEqual(Time(8, 58), this.results[1].Fahrtzeiten[1].Ankunftszeit); Assert.AreEqual(Time(9, 08), this.results[2].Fahrtzeiten[1].Ankunftszeit); }
public void TestUmsteigezeitZuSpät() { var target = new VerbindungsErzeugung(new FahrplanProviderMock()); this.results = new List<Verbindung>(); target.OnVerbindung += MerkeVerbindungInListe; Pfad pfad = new Pfad(); pfad.Starthaltestellenname = "H1"; pfad.Strecken = new Strecke[2]; Strecke s = new Strecke(); s.Linienname = "U2"; s.Zielhaltestellenname = "H2"; pfad.Strecken[0] = s; s = new Strecke(); s.Linienname = "U1"; s.Zielhaltestellenname = "H3"; pfad.Strecken[1] = s; target.Verbindugen_zu_Pfad_bilden(pfad, Time(9, 07)); Assert.AreEqual(0, this.results.Count); }