public void RouteCacheTestDifferentRanges() { var sw = new Stopwatch(); DataSetup(); RouteFinder.ClearCache(); var rf1 = new RouteFinder(); rf1.JumpRange = 30.0F; sw.Start(); rf1.Route(EDSystemManager.Instance.Find("HIP 41181"), EDSystemManager.Instance.Find("Vamm")); sw.Stop(); var uncachedTime = sw.ElapsedTicks; Assert.AreEqual(false, rf1.LastResultWasFromCache); var rf2 = new RouteFinder(); rf2.JumpRange = 40F; sw.Reset(); sw.Start(); rf2.Route(EDSystemManager.Instance.Find("HIP 41181"), EDSystemManager.Instance.Find("Vamm")); sw.Stop(); var cachedTime = sw.ElapsedTicks; Assert.AreEqual(false, rf2.LastResultWasFromCache); }
public void ComputesEdgeDistanceWithInnerWaypointsCorrectly() { var w0 = new Waypoint("0", 0.0, 0.0); var w1 = new Waypoint("1", 1.0, 1.0); var w2 = new Waypoint("2", 1.0, -0.9999); var w3 = new Waypoint("3", 0.0, 2.0); var wptList = GetWptList(w0, w1, w2, w3); int i0 = wptList.FindByWaypoint(w0); int i1 = wptList.FindByWaypoint(w1); int i2 = wptList.FindByWaypoint(w2); int i3 = wptList.FindByWaypoint(w3); var n = new Neighbor( "03", new[] { w0, w1, w2 }.TotalDistance(), new[] { w1 }, InnerWaypointsType.Track); wptList.AddNeighbor(i0, i2, n); wptList.AddNeighbor(i0, "02", i2); wptList.AddNeighbor(i2, "23", i3); var route = new RouteFinder(wptList).FindRoute(i0, i3); var expected = GetRoute( w0, "02", -1.0, w2, "23", -1.0, w3); Assert.IsTrue(expected.Equals(route)); }
public void CanAvoidCountry() { var w1 = new Waypoint("1", 0.0, 1.0); var w2 = new Waypoint("2", 0.0, 2.0, 0); var w3 = new Waypoint("3", 5.0, 2.0, 1); var w4 = new Waypoint("4", 0.0, 3.0); var wptList = GetWptList(w1, w2, w3, w4); int i1 = wptList.FindByWaypoint(w1); int i2 = wptList.FindByWaypoint(w2); int i3 = wptList.FindByWaypoint(w3); int i4 = wptList.FindByWaypoint(w4); wptList.AddNeighbor(i1, "12", i2); wptList.AddNeighbor(i1, "13", i3); wptList.AddNeighbor(i2, "24", i4); wptList.AddNeighbor(i3, "34", i4); var avoid = new CountryCodeCollection(new[] { 0 }); var route = new RouteFinder(wptList, avoid).FindRoute(i1, i4); var expected = GetRoute( w1, "13", -1.0, w3, "34", -1.0, w4); Assert.IsTrue(expected.Equals(route)); }
private static TestScenarioRunner CreateTestScenarioRunner(List <ConnectedStations> connectedStations) { var distanceCalculator = new SpecificRouteDistanceCalculator(connectedStations); var routesFinder = new RouteFinder(connectedStations); var testScenarioRunner = new TestScenarioRunner(Console.Out, distanceCalculator, routesFinder); return(testScenarioRunner); }
private static void AssertPathFromMap( string[] map, Vector from, Vector to, IEnumerable <Vector> expected) { var result = RouteFinder.FindRoute( from, to, vector => IsValidMove(map, vector)); AssertPath(expected, result); }
static void Main(string[] args) { const string path = "../data1.txt"; var finder = new RouteFinder(); var route = finder.FindNumericalRouteFromFile(path); Console.WriteLine(route); Console.WriteLine($"Sum: {route.Steps.Sum()}"); }
public void RouteFinder_Should_Call_RouteExplorer() { // Arrange var startPoint = this.pointA; var endPoint = this.pointD; var routes = new List <Path> { new Path { Id = 1, PointOne = this.pointA, PointTwo = this.pointB, Distance = 1 }, new Path { Id = 2, PointOne = this.pointB, PointTwo = this.pointC, Distance = 4 }, new Path { Id = 3, PointOne = this.pointC, PointTwo = this.pointD, Distance = 3 }, new Path { Id = 4, PointOne = this.pointA, PointTwo = this.pointD, Distance = 20 } }; var expected = new List <Route> { new Route() { Paths = new List <Path>() } }; var mockRouteExplorer = new Mock <IRouteExplorer>(); mockRouteExplorer .Setup(x => x.GetAllPossibleRoutes(It.IsAny <List <Path> >(), It.IsAny <Point>(), It.IsAny <Point>())) .Returns(expected); var mockShortestRouteFinder = new Mock <IShortestRouteFinder>(); var mockShortestRouteFinderResult = new Route(); var mockRouteValidator = new Mock <IRouteValidator>(); mockShortestRouteFinder .Setup(x => x.GetShortestRoute(expected)) .Returns(mockShortestRouteFinderResult); var routeFinder = new RouteFinder(mockRouteExplorer.Object, mockShortestRouteFinder.Object, new DatabaseReader(), mockRouteValidator.Object); // Act var result = routeFinder.CalculateShortestRoute(startPoint, endPoint); // Assert mockRouteExplorer.Verify(x => x.GetAllPossibleRoutes(routes, startPoint, endPoint), Times.Once); mockShortestRouteFinder.Verify(x => x.GetShortestRoute(expected), Times.Once); mockShortestRouteFinderResult.Should().Be(result); }
public void MultiRouteTestThreeRoutes() { //multiroute from="39 leonis" route="hip 41181,vamm,tocorii" route="bd+34 1378,hip 11693" route="lugh,brohman" jump=30 DataSetup(); var mr = new MultiRouteFinder(); mr.JumpRange = 30.0F; var start = EDSystemManager.Instance.Find("39 leonis"); var routes = new List <Queue <EDSystem> >(); var routeA = new Queue <EDSystem>(); routeA.Enqueue(EDSystemManager.Instance.Find("hip 41181")); routeA.Enqueue(EDSystemManager.Instance.Find("vamm")); routeA.Enqueue(EDSystemManager.Instance.Find("tocorii")); routes.Add(routeA); var routeB = new Queue <EDSystem>(); routeB.Enqueue(EDSystemManager.Instance.Find("bd+34 1378")); routeB.Enqueue(EDSystemManager.Instance.Find("hip 11693")); routes.Add(routeB); var routeC = new Queue <EDSystem>(); routeC.Enqueue(EDSystemManager.Instance.Find("lugh")); routeC.Enqueue(EDSystemManager.Instance.Find("brohman")); routes.Add(routeC); var finalRoute = mr.Route(start, routes); Assert.AreEqual(9, finalRoute.Count()); int i = 0; EDSystem prev = null; RouteFinder r = new RouteFinder(); r.JumpRange = 30; while (finalRoute.Count() > 0) { var dest = finalRoute.Dequeue(); Console.Write($"{i} {dest.name}"); if (prev != null) { var distance = Astrogation.Distance(prev, dest); var jumps = r.Route(prev, dest).Count(); Console.Write($" ({distance:n1} LY, {jumps:n0} jumps)"); } Console.WriteLine(); prev = dest; i++; } }
public void Given_a_route_of_B_to_B_then_return_the_shortest_distance_available_to_travel() { var routingData = TestData.ConnectedStations; var routesFinder = new RouteFinder(routingData); var distance = routesFinder.GetShortestRoute("B", "B").TotalDistance; Assert.That(distance, Is.EqualTo(9)); }
public void Given_a_route_of_A_to_C_then_return_the_number_of_routes_with_exactly_4_stops() { var routingData = TestData.ConnectedStations; var routesFinder = new RouteFinder(routingData); var numberOfRoutes = routesFinder.GetRoutes("A", "C").WithExactStops(4).Count(); Assert.That(numberOfRoutes, Is.EqualTo(3)); }
public void OriginDestinationWaypointsTheSameShouldThrow() { var w = new Waypoint("1", 0.0, 1.0); var wptList = GetWptList(w); int i = wptList.FindByWaypoint(w); var finder = new RouteFinder(wptList); Assert.Throws <ArgumentException>(() => finder.FindRoute(i, i)); }
public void Given_a_route_of_C_to_C_then_return_the_number_of_routes_with_a_distance_less_than_30() { var routingData = TestData.ConnectedStations; var routesFinder = new RouteFinder(routingData); var numberOfRoutes = routesFinder.GetRoutes("C", "C").WithADistanceLessThan(30).Count(); Assert.That(numberOfRoutes, Is.EqualTo(7)); }
public void RouteTest() { DataSetup(); var j = new RouteFinder(); j.JumpRange = 30.0F; var route = j.Route(EDSystemManager.Instance.Find("Olgrea"), EDSystemManager.Instance.Find("Te Kaha")); Assert.AreEqual(8, route.Count()); }
public void RouteTest2() { DataSetup(); var j = new RouteFinder(); j.JumpRange = 30.0F; var route = j.Route(EDSystemManager.Instance.Find("HIP 41181"), EDSystemManager.Instance.Find("Vamm")); Assert.AreEqual(6, route.Count()); }
public void Given_a_route_of_C_to_C_then_return_the_number_of_routes_with_no_more_than_3_stops() { var routingData = TestData.ConnectedStations; var routesFinder = new RouteFinder(routingData); var numberOfRoutes = routesFinder.GetRoutes("C", "C").WithMaxStops(3).Count(); Assert.That(numberOfRoutes, Is.EqualTo(2)); }
public async Task <IActionResult> GetRoute(string originStationName, string destinationStationName, TimeSpan leavingAfter, string primaryStations) { RouteFinder routeFinder = new RouteFinder(_context); List <Train> trains = routeFinder.GetTrains(originStationName, destinationStationName, leavingAfter); ViewBag.originStationName = originStationName; ViewBag.destinationStationName = destinationStationName; ViewBag.primaryStations = primaryStations; return(View(trains)); //return View(ticket); }
public void FindRouteNoWalls() { var result = RouteFinder.FindRoute( Vector.Create(1, 1), Vector.Create(1, 3), vector => true); Assert.IsTrue(result.HasValue); AssertPath( new [] { Vector.Create(1, 2), Vector.Create(1, 3) }, result); }
public void RouteTestNoSystemsInRange() { // You can't get from Olgrea to Sheela Na Gig with 5LY jumps, it is 6.597303LY DataSetup(); var j = new RouteFinder(); j.JumpRange = 5; var route = j.Route(EDSystemManager.Instance.Find("Olgrea"), EDSystemManager.Instance.Find("Sheela Na Gig")); Assert.AreEqual(0, route.Count()); }
/// <summary> /// Creates new Twino MVC /// </summary> public TwinoMvc() { Routes = new List <RouteLeaf>(); Services = new ServiceContainer(); RouteFinder = new RouteFinder(); ControllerFactory = new ControllerFactory(); NotFoundResult = StatusCodeResult.NotFound(); ErrorHandler = new DefaultErrorHandler(); Policies = new PolicyContainer(); AppBuilder = new MvcAppBuilder(this); }
public void TestFindRouteWhenMaxDepthReached() { RouteFinder limitedRouteFinder = Factory.CreateMockedRouteFinder(2); Flight[] route = limitedRouteFinder.FindRouteAsync("LINE_1", "LINE_4", CancellationToken.None).Result; Assert.IsNotNull(route); Assert.AreEqual(0, route.Length); route = routeFinder.FindRouteAsync("LINE_1", "LINE_4", CancellationToken.None).Result; Assert.IsNotNull(route); Assert.AreNotEqual(0, route.Length); }
/// <summary> /// Find optimal running route through cougar /// </summary> /// <param name="geometry"></param> private static void RunCougarFinder(Geometry geometry) { geometry = new DropBuildings().Transform(geometry); geometry = new DropWater().Transform(geometry); OutputPolygons("275765", geometry); geometry = new OnlyTraversable().Transform(geometry); geometry = new CollapseParkingLots().Transform(geometry); var cougar = geometry.Relations.First(x => x.Id == "275765"); var ways = new LabelWaysInRelation().Transform(cougar, geometry); ways = new SplitBisectedWays().Transform(ways); DebugOut(ways, "labeledWays.json"); var targetNodes = new HashSet <Node>(); foreach (var way in ways) { if (way.Tags["rfInPolygon"] == "in") { targetNodes.Add(way.Nodes.First()); targetNodes.Add(way.Nodes.Last()); } } var graph = new GraphBuilder(new RequiredEdgeGraphFilter(), new ReasonablyEnjoyableRunningCost()).BuildGraph(ways.ToArray(), out var originalEdgeWays); new GraphSummaryOutputter(outputLocation).OutputGraph(graph, originalEdgeWays, "reducedGraph.json"); var requiredCost = graph.RequiredEdgeCost(); // lazy route var lazyRouteFinder = new RouteFinder <Node>(new LazyGraphAugmenter <Node>()); var lazyRoute = lazyRouteFinder.GetRoute(graph); var lazyRouteCost = lazyRoute.Select(x => x.Distance).Sum(); // do regular route (rebuilds graph) graph = new GraphBuilder(new RequiredEdgeGraphFilter(), new ReasonablyEnjoyableRunningCost()).BuildGraph(ways.ToArray(), out originalEdgeWays); var greedRouteFinder = new RouteFinder <Node>(new GreedyGraphAugmenter <Node>()); var route = greedRouteFinder.GetRoute(graph); var routeCost = route.Select(x => x.Distance).Sum(); //new RouteCoverageOutputter(outputLocation).OutputGraph(route, originalEdgeWays, "greedyRouteCoverage.json"); new RouteDetailOutputter(ways, outputLocation, "lazyRouteCoverage.json", "instructions.txt").DescribeRoutesAsWays(lazyRoute); Console.WriteLine($"Required running: {requiredCost}"); Console.WriteLine($"Lazy Route: {lazyRouteCost}"); Console.WriteLine($"Greedy Route: {routeCost}"); Console.Read(); }
public ActionResult <BusScheduleInfo> GetSchedule([FromQuery] string from, string to, string start) { var data = reader.ReadBusScheduleAsync(); var routes = parser.ParseBusSchedule(data.Result); RouteFinder finder = new RouteFinder(routes); var routeInfo = finder.FindRoute(from, to, start); if (routeInfo == null) { return(NotFound()); } return(Ok(routeInfo)); }
/// <exception cref="RouteNotFoundException"></exception> /// <exception cref="ArgumentException"></exception> private Route GetRouteWaypointToWaypoint() { EnsureOrigWptExists(); EnsureDestWptExists(); var fuelModel = model.FuelPlanningModel; var finder = new RouteFinder( fuelModel.AirwayNetwork.WptList, fuelModel.CheckedCountryCodes.Instance, model.WindCalc()); return(finder.FindRoute(OrigWaypointIndex, DestWaypointIndex)); }
public void SameStations() { StationEntity fromStation = MetroWebEntity.Instance.StationList["宜山路", "4号线"]; StationEntity toStation = MetroWebEntity.Instance.StationList["宝山路", "3号线"]; finder = new RouteFinder(); Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation); Assert.AreEqual(10, result1.Item1.Count); Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation); Assert.AreEqual(10, result2.Item1.Count); }
public void ComplexTransfer() { StationEntity fromStation = MetroWebEntity.Instance.StationList["东川路", "5号线"]; StationEntity toStation = MetroWebEntity.Instance.StationList["北洋泾路", "6号线"]; finder = new RouteFinder(); Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation); Assert.AreEqual(26, result1.Item1.Count); finder = new RouteFinder(); Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation); Assert.AreEqual(25, result2.Item1.Count); }
public void GetTwoStationsALittleFar() { StationEntity fromStation = MetroWebEntity.Instance.StationList["临港大道", "16号线"]; StationEntity toStation = MetroWebEntity.Instance.StationList["惠南东", "16号线"]; finder = new RouteFinder(); Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation); Assert.AreEqual(3, result1.Item1.Count); finder = new RouteFinder(); Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation); Assert.AreEqual(3, result2.Item1.Count); }
public void TwoStationNeedTransfer() { StationEntity fromStation = MetroWebEntity.Instance.StationList["杨高中路", "9号线"]; StationEntity toStation = MetroWebEntity.Instance.StationList["东昌路", "2号线"]; finder = new RouteFinder(); Tuple <List <StationLineEntity>, TimeSpan> result1 = finder.GetTheNearestRouteBetween(fromStation, toStation); Assert.AreEqual(3, result1.Item1.Count); finder = new RouteFinder(); Tuple <List <StationLineEntity>, TimeSpan> result2 = finder.GetTheNearestRouteBetween(toStation, fromStation); Assert.AreEqual(3, result2.Item1.Count); }
public void MultiRouteTest() { DataSetup(); var mr = new MultiRouteFinder(); mr.JumpRange = 30.0F; var start = EDSystemManager.Instance.Find("Olgrea"); var routes = new List <Queue <EDSystem> >(); var routeA = new Queue <EDSystem>(); routeA.Enqueue(EDSystemManager.Instance.Find("Te Kaha")); routeA.Enqueue(EDSystemManager.Instance.Find("Cao Junga")); routes.Add(routeA); var routeB = new Queue <EDSystem>(); routeB.Enqueue(EDSystemManager.Instance.Find("Carnsan")); routeB.Enqueue(EDSystemManager.Instance.Find("HIP 13179")); routes.Add(routeB); var finalRoute = mr.Route(start, routes); Assert.AreEqual(6, finalRoute.Count()); int i = 0; EDSystem prev = null; RouteFinder r = new RouteFinder(); r.JumpRange = 30; while (finalRoute.Count() > 0) { var dest = finalRoute.Dequeue(); Console.Write($"{i} {dest.name}"); if (prev != null) { var distance = Astrogation.Distance(prev, dest); var jumps = r.Route(prev, dest).Count(); Console.Write($" ({distance:n1} LY, {jumps:n0} jumps)"); } Console.WriteLine(); prev = dest; i++; } }
private void btnFindRoute_Click(object sender, EventArgs e) { RouteFinder routeFinder = new RouteFinder(0, 0, width - 1, height - 1, chbCanMoveDiagonally.Checked); int countInitialLocations = 0; int countGoalLocations = 0; for (int i = 0; i < pnlMAP.Controls.Count; i++) { int x = i % width; int y = i / width; Location loc = new Location(x, y); switch ((string)pnlMAP.Controls[i].Tag) { case initialTag: countInitialLocations++; if (countInitialLocations > 1) { MessageBox.Show("There cannot be more than one initial location.", this.Text); return; } routeFinder.InitialLocation = loc; break; case obstacleTag: routeFinder.AddObstacle(loc); break; case goalTag: countGoalLocations++; routeFinder.AddGoal(loc); break; case routeTag: MakeEmpty(pnlMAP.Controls[i] as Button); break; } } if (countGoalLocations == 0) { MessageBox.Show("There must be atleast one goal location.", this.Text); } DisplayRoute(routeFinder.CalculateRoute()); }
public void Should_try_a_similar_route_after_exhausting_one_path() { var routingData = new List <ConnectedStations> { new ConnectedStations("A", "C", 5), new ConnectedStations("C", "A", 4), new ConnectedStations("C", "E", 5), new ConnectedStations("E", "A", 3) }; var routesFinder = new RouteFinder(routingData); var routes = routesFinder.GetRoutes("A", "A"); Assert.True(routes.Any(r => OutputRouteAsString(r) == "ACCEEA")); }