예제 #1
0
        private AnalyzerWithCommands GetAnalyzer1(params string[] route)
        {
            InitObjects1();

            var wptList = new WaypointList();

            var wptP1 = new Waypoint("P1", 24.0, 120.0);
            var wptQ1 = new Waypoint("Q1", 23.0, 114.0);
            int p1    = wptList.AddWaypoint(wptP1);
            int q1    = wptList.AddWaypoint(wptQ1);

            var neighbor = new Neighbor("A1", wptP1.Distance(wptQ1));

            wptList.AddNeighbor(p1, q1, neighbor);

            return(new AnalyzerWithCommands(
                       route.ToRouteString(),
                       "ABCD",
                       "05L",
                       "EFGH",
                       "07L",
                       airportList,
                       wptList,
                       wptList.GetEditor(),
                       sids,
                       stars));
        }
예제 #2
0
        public void WhenMainRouteWptDoesNotExistShouldRecordFailure()
        {
            // Arrange
            var p1 = new Waypoint("P1", 0.0, 0.0);
            var p2 = new Waypoint("P2", 0.0, 2.0);

            var wptList = new WaypointList();

            var route = new Route();

            route.AddLastWaypoint(p1);
            route.AddLastWaypoint(p2, "DCT");
            var nodes = new TrackNodes("A", "NATA", route, new List <WptPair>());

            var recorder = new StatusRecorder();

            var adder = new TrackAdder(
                wptList,
                wptList.GetEditor(),
                recorder,
                TrackType.Nats);

            // Act
            adder.AddToWaypointList(new[] { nodes });

            // Assert
            Assert.AreEqual(1, recorder.Records.Count);
        }
예제 #3
0
        private void AddToWptListCase3And5(WaypointList wptList)
        {
            var entry = new SidEntry(
                "18",
                "SID1",
                List(wpt101, wpt102, wpt103, wpt104),
                EntryType.RwySpecific,
                false);

            var adder =
                new SidAdder(
                    "AXYZ",
                    new SidCollection(
                        List(entry)),
                    wptList,
                    wptList.GetEditor(),
                    GetAirportManager());

            int rwyIndex = adder.AddSidsToWptList("18", List("SID1"));

            // Check the SID has been added with correct total distance.
            var edges = wptList.EdgesFrom(rwyIndex).ToList();

            Assert.IsTrue(edges.Count > 0);
            Assert.IsTrue(edges.Select(e => wptList.GetEdge(e))
                          .All(e =>
                               e.Value.InnerWaypoints.SequenceEqual(List(wpt101, wpt102, wpt103)) &&
                               e.Value.Type == InnerWaypointsType.Terminal));

            double dis = List(rwy, wpt101, wpt102, wpt103, wpt104).TotalDistance();

            Assert.IsTrue(SidIsAdded(
                              rwyIndex,
                              "SID1",
                              dis,
                              wptList));

            // Check the edges of last wpt
            int index = wptList.FindByWaypoint(wpt104);

            Assert.AreEqual(2, wptList.EdgesFromCount(index));

            foreach (var i in wptList.EdgesFrom(index))
            {
                var edge     = wptList.GetEdge(i);
                var neighbor = edge.Value;
                Assert.AreEqual("DCT", neighbor.Airway);
                Assert.AreEqual(0, neighbor.InnerWaypoints.Count);

                var expectedDis = wpt104.Distance(wptList[edge.ToNodeIndex]);

                Assert.AreEqual(
                    expectedDis,
                    neighbor.Distance,
                    DistanceEpsilon);
            }
        }
예제 #4
0
        private void AddToWptListCase2And4(WaypointList wptList)
        {
            var entry = new StarEntry(
                "18",
                "STAR1",
                List(wpt101, wpt102, wpt103, wpt104),
                EntryType.RwySpecific);

            var adder = new StarAdder(
                "AXYZ",
                new StarCollection(List(entry)),
                wptList,
                wptList.GetEditor(),
                GetAirportManager());

            int rwyIndex = adder.AddStarsToWptList("18", List("STAR1"));

            // Check the STAR1 has been added with correct total distance.
            var edges = wptList.EdgesTo(rwyIndex).ToList();

            Assert.IsTrue(edges.Count > 0);

            Assert.IsTrue(edges
                          .Select(e => wptList.GetEdge(e))
                          .All(e =>
                               e.Value.InnerWaypoints.SequenceEqual(List(wpt102, wpt103, wpt104)) &&
                               e.Value.Type == InnerWaypointsType.Terminal));

            double dis = List(wpt101, wpt102, wpt103, wpt104, rwy)
                         .TotalDistance();

            Assert.IsTrue(StarIsAdded(
                              wptList.FindByWaypoint(wpt101),
                              "STAR1",
                              dis,
                              wptList));

            // Check the edges of first wpt
            int index = wptList.FindByWaypoint(wpt101);

            Assert.IsTrue(index >= 0);
            Assert.AreEqual(2, wptList.EdgesToCount(index));

            foreach (var i in wptList.EdgesTo(index))
            {
                var edge = wptList.GetEdge(i);
                Assert.AreEqual("DCT", edge.Value.Airway);
                Assert.AreEqual(0, edge.Value.InnerWaypoints.Count);

                double expectedDis = wpt101.Distance(wptList[edge.FromNodeIndex]);
                Assert.AreEqual(expectedDis, edge.Value.Distance, DistanceEpsilon);
            }
        }
        // @Throws
        public static Route AnalyzeWithCommands(
            string route,
            string origIcao,
            string origRwy,
            string destIcao,
            string destRwy,
            string navDataLocation,
            AirportManager airportList,
            WaypointList wptList)
        {
            var sidHandler = SidHandlerFactory.GetHandler(
                origIcao,
                navDataLocation,
                wptList,
                wptList.GetEditor(),
                airportList);

            var starHandler = StarHandlerFactory.GetHandler(
                destIcao,
                navDataLocation,
                wptList,
                wptList.GetEditor(),
                airportList);

            return(new AnalyzerWithCommands(
                       CoordinateFormatter.Split(route),
                       origIcao,
                       origRwy,
                       destIcao,
                       destRwy,
                       airportList,
                       wptList,
                       wptList.GetEditor(),
                       sidHandler.SidCollection,
                       starHandler.StarCollection).Analyze());
        }
예제 #6
0
        public void AddsMainRouteCorrectly()
        {
            // Arrange
            var p1 = new Waypoint("P1", 0.0, 0.0);
            var p2 = new Waypoint("P2", 0.0, 2.0);
            var p3 = new Waypoint("P3", 0.0, 4.0);

            var wptList = new WaypointList();

            wptList.AddWaypoint(p1);
            wptList.AddWaypoint(p2);
            wptList.AddWaypoint(p3);

            var route = new Route();

            route.AddLastWaypoint(p1);
            route.AddLastWaypoint(p2, "DCT");
            route.AddLastWaypoint(p3, "DCT");
            var nodes = new TrackNodes("A", "NATA", route, new WptPair[0]);

            var adder = new TrackAdder(
                wptList,
                wptList.GetEditor(),
                new StatusRecorder(),
                TrackType.Nats);

            // Act
            adder.AddToWaypointList(new[] { nodes });

            // Assert
            int indexP1 = wptList.FindByWaypoint(p1);

            Assert.AreEqual(1, wptList.EdgesFromCount(indexP1));

            var edge     = wptList.EdgesFrom(indexP1).First();
            var neighbor = wptList.GetEdge(edge).Value;

            Assert.IsTrue(neighbor.Airway == "NATA");

            Assert.IsTrue(neighbor.InnerWaypoints.SequenceEqual(CreateList(p2)));
            Assert.AreEqual(InnerWaypointsType.Track, neighbor.Type);

            var distance = p1.Distance(p2) + p2.Distance(p3);

            Assert.AreEqual(distance, neighbor.Distance);
        }
예제 #7
0
        private AnalyzerWithCommands GetAnalyzer2(params string[] route)
        {
            InitObjects2();

            var wptList = new WaypointList();

            wptList.AddWaypoint(new Waypoint("N37E112", 37.0, 112.0));
            wptList.AddWaypoint(new Waypoint("N30E117", 30.0, 117.0));

            return(new AnalyzerWithCommands(
                       route.ToRouteString(),
                       "ABCD",
                       "05L",
                       "EFGH",
                       "07L",
                       airportList,
                       wptList,
                       wptList.GetEditor(),
                       new SidCollection(new SidEntry[0]),
                       new StarCollection(new StarEntry[0])));
        }
예제 #8
0
        public Route FindRoute(
            string origIcao, string origRwy, IReadOnlyList <string> sids,
            string destIcao, string destRwy, IReadOnlyList <string> stars)
        {
            var editor     = wptList.GetEditor();
            var sidHandler = SidHandlerFactory.GetHandler(
                origIcao,
                navDataLocation,
                wptList,
                editor,
                airportList);

            var starHandler = StarHandlerFactory.GetHandler(
                destIcao,
                navDataLocation,
                wptList,
                editor,
                airportList);

            return(finder.FindRoute(
                       new OrigInfo(origRwy, sids, sidHandler),
                       new DestInfo(destRwy, stars, starHandler),
                       editor));
        }