示例#1
0
 public TemplateHelper(Timetable tt)
 {
     filterable = Plugin.FilterRuleContainer;
     this.tt    = tt;
     attrs      = BfplAttrs.GetAttrs(tt);
     analyzer   = new IntersectionAnalyzer(tt);
 }
示例#2
0
        private static void GeneralOvertakeTest(Stream s)
        {
            var tt = new XMLImport().Import(s, new DummyPluginInterface());

            var analyzer = new IntersectionAnalyzer(tt);

            var station = tt.Stations.Single(st => st.SName == "B");

            // Overlap at end
            {
                var probeTrain   = tt.Trains.Single(t => t.TName == "P-overlap-end");
                var crossingWith = analyzer.OvertakeAtStation(probeTrain, station).ToArray();
                Assert.AreEqual(1, crossingWith.Length);
                Assert.AreEqual("C-overlap-end", crossingWith[0].TName);

                Assert.AreEqual(probeTrain, analyzer.OvertakeAtStation(crossingWith[0], station).Single());
            }

            // Overlap at begin
            {
                var probeTrain   = tt.Trains.Single(t => t.TName == "P-overlap-begin");
                var crossingWith = analyzer.OvertakeAtStation(probeTrain, station).ToArray();
                Assert.AreEqual(1, crossingWith.Length);
                Assert.AreEqual("C-overlap-begin", crossingWith[0].TName);

                Assert.AreEqual(probeTrain, analyzer.OvertakeAtStation(crossingWith[0], station).Single());
            }

            // Overlap in the middle
            {
                var probeTrain   = tt.Trains.Single(t => t.TName == "P-overlap-middle");
                var crossingWith = analyzer.OvertakeAtStation(probeTrain, station).ToArray();
                Assert.AreEqual(1, crossingWith.Length);
                Assert.AreEqual("C-overlap-middle", crossingWith[0].TName);

                Assert.AreEqual(probeTrain, analyzer.OvertakeAtStation(crossingWith[0], station).Single());
            }

            // Second train with no stop time
            {
                var probeTrain   = tt.Trains.Single(t => t.TName == "P-no-minutes");
                var crossingWith = analyzer.OvertakeAtStation(probeTrain, station).ToArray();
                Assert.AreEqual(1, crossingWith.Length);
                Assert.AreEqual("C-no-minutes", crossingWith[0].TName);

                Assert.AreEqual(probeTrain, analyzer.OvertakeAtStation(crossingWith[0], station).Single());
            }

            // Second train with no stop time (two trains)
            {
                var probeTrain   = tt.Trains.Single(t => t.TName == "P-no-minutes-double");
                var crossingWith = analyzer.OvertakeAtStation(probeTrain, station).ToArray();
                Assert.AreEqual(2, crossingWith.Length);
                Assert.AreEqual("C-no-minutes-double1", crossingWith[0].TName);
                Assert.AreEqual("C-no-minutes-double2", crossingWith[1].TName);
            }
        }
示例#3
0
        // No ComplexNetworkOvertakeTest with test_overtake2.fpl as overtaking can only happen on the same route.

        private static void GeneralTrapezTest(Stream s)
        {
            var tt = new XMLImport().Import(s, new DummyPluginInterface());

            var analyzer = new IntersectionAnalyzer(tt);

            var station = tt.Stations.Single(st => st.SName == "B");

            // Normal
            {
                var probeTrain = tt.Trains.Single(t => t.TName == "P-normal");
                var trapez0    = analyzer.TrapezAtStation(probeTrain, station);
                Assert.AreEqual(0, trapez0.IntersectingTrainsStopping.Length);
                Assert.IsTrue(trapez0.IsStopping);
                Assert.AreEqual(Days.Parse("1111100"), trapez0.StopDays);
            }
            // Normal (reverse)
            {
                var probeTrain = tt.Trains.Single(t => t.TName == "C-normal");
                var trapez1    = analyzer.TrapezAtStation(probeTrain, station);

                Assert.AreEqual(1, trapez1.IntersectingTrainsStopping.Length);
                Assert.AreEqual("P-normal", trapez1.IntersectingTrainsStopping[0].TName);
                Assert.IsFalse(trapez1.IsStopping);
                Assert.AreEqual(Days.Parse("1111100"), trapez1.StopDays);
            }

            // Single train
            {
                var probeTrain = tt.Trains.Single(t => t.TName == "P-single");
                var trapez0    = analyzer.TrapezAtStation(probeTrain, station);
                Assert.AreEqual(0, trapez0.IntersectingTrainsStopping.Length);
                Assert.IsTrue(trapez0.IsStopping);
                Assert.AreEqual("1111100", trapez0.StopDays.ToBinString());
            }

            // Multiple
            {
                var probeTrain = tt.Trains.Single(t => t.TName == "P-multiple");
                var trapez0    = analyzer.TrapezAtStation(probeTrain, station);
                Assert.AreEqual(1, trapez0.IntersectingTrainsStopping.Length);
                Assert.AreEqual("C-multiple", trapez0.IntersectingTrainsStopping[0].TName);
                Assert.IsTrue(trapez0.IsStopping);
                Assert.AreEqual(Days.Parse("1111100"), trapez0.StopDays);

                var trapez1 = analyzer.TrapezAtStation(trapez0.IntersectingTrainsStopping[0], station);

                Assert.AreEqual(2, trapez1.IntersectingTrainsStopping.Length);
                Assert.AreEqual("P-multiple", trapez1.IntersectingTrainsStopping[0].TName);
                Assert.IsTrue(trapez1.IsStopping);
                Assert.AreEqual(Days.Parse("1111100"), trapez1.StopDays);
            }
        }