Пример #1
0
        public void Case4Test()
        {
            // Setup
            var route = new[] { "SID1", "P1", "HLG", "A1", "MKG" };

            var wptList = new WaypointList();
            var rwy     = new Waypoint("RCTP05L", 20.0, 120.0);
            var wpt1    = new Waypoint("HLG", 22.0, 122.0);

            wptList.AddWaypoint(wpt1);

            var p1 = new Waypoint("P1", 21.0, 121.0);

            var sid = new SidEntry(
                "05L",
                "SID1",
                new[] { p1 },
                EntryType.RwySpecific,
                false);

            var extractor = new SidExtractor(
                route.ToRouteString(),
                "05L",
                rwy,
                wptList,
                new SidCollection(new[] { sid }));

            // Invoke
            var result = extractor.Extract();

            // Assert
            Assert.IsTrue(result.RemainingRoute.SequenceEqual(new[] { "HLG", "A1", "MKG" }));

            var origRoute = result.OrigRoute;

            Assert.AreEqual(3, origRoute.Count);

            var node      = origRoute.First;
            var neighbor1 = node.Value.Neighbor;

            Assert.IsTrue(node.Value.Waypoint.Equals(rwy));
            Assert.IsTrue(neighbor1.Airway == sid.Name);
            Assert.AreEqual(neighbor1.Distance, rwy.Distance(p1), 1E-8);
            Assert.AreEqual(0, neighbor1.InnerWaypoints.Count);
            Assert.AreEqual(InnerWaypointsType.Terminal, neighbor1.Type);

            node = node.Next;
            var neighbor2 = node.Value.Neighbor;

            Assert.IsTrue(node.Value.Waypoint.Equals(p1));
            Assert.IsTrue(neighbor2.Airway == "DCT");
            Assert.AreEqual(neighbor2.Distance, p1.Distance(wpt1), 1E-8);
            Assert.AreEqual(0, neighbor2.InnerWaypoints.Count);
            Assert.AreEqual(InnerWaypointsType.None, neighbor2.Type);

            node = node.Next;
            Assert.IsTrue(node.Value.Waypoint.Equals(wpt1));
        }
Пример #2
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);
            }
        }
Пример #3
0
        public void AddToWptListCase2()
        {
            var wptList = Case2WptList();

            var entry = new SidEntry(
                "18",
                "SID1",
                List(wpt101, wpt102),
                EntryType.RwySpecific,
                true);

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

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

            var distance = List(
                rwy,
                wpt101,
                wpt102)
                           .TotalDistance();

            // Check the SID has been added with correct total distance.
            Assert.AreEqual(2, wptList.EdgesFromCount(rwyIndex));

            // Check the edges of last wpt
            foreach (var i in wptList.EdgesFrom(rwyIndex))
            {
                var edge = wptList.GetEdge(i);
                Assert.AreEqual("SID1", edge.Value.Airway);
                Assert.AreEqual(InnerWaypointsType.Terminal, edge.Value.Type);

                var expectedDis = distance +
                                  wpt102.Distance(wptList[edge.ToNodeIndex]);

                Assert.AreEqual(
                    expectedDis, edge.Value.Distance, DistanceEpsilon);
            }
        }
Пример #4
0
        public void AddToWptListCase4()
        {
            var wptList  = Case4WptList();
            var wpt01    = new Waypoint("WPT01", 25.0, 50.0);
            var wptCoord = new Waypoint("26N050E", 26.0, 50.0);

            var entry = new SidEntry(
                "18",
                "SID1",
                List(wpt01, wptCoord),
                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 SID1 has been added with correct total distance.
            var edges = wptList.EdgesFrom(rwyIndex).ToList();

            Assert.AreEqual(1, edges.Count);
            var edge = wptList.GetEdge(edges[0]);

            Assert.IsTrue(edge.Value.InnerWaypoints.SequenceEqual(new[] { wpt01 }));
            Assert.AreEqual(InnerWaypointsType.Terminal, edge.Value.Type);

            var dis = List(rwy, wpt01, wptCoord).TotalDistance();

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