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)); }
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); } }
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); } }
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)); }