コード例 #1
0
 public async Task BuildGraph()
 {
     await Task.Run(() =>
     {
         _network = new FlightNetwork(_airportCount, _airports, _routes);
     });
 }
コード例 #2
0
        public void TestInitialize()
        {
            Loader       data  = new Loader("test");
            GraphNetwork graph = new GraphNetwork(data);

            flightNet = new FlightNetwork(data, graph);
        }
コード例 #3
0
    public void Should_invalidate_circular_reference()
    {
        var line = "AAA,AAA,180";

        var network = new FlightNetwork();
        var result  = network.LoadFrom(new[] { line });

        Assert.AreEqual("CIRCULAR_REFERENCE > AAA, AAA", result.Errors.First());
    }
コード例 #4
0
    public void Should_upper_case_all_routes_inputed()
    {
        var line = "gru,brc,10";

        var network = new FlightNetwork();
        var result  = network.LoadFrom(new[] { line });

        Assert.IsFalse(result.HasErrors);
        Assert.IsNotNull(network.Hubs["GRU"]);
    }
コード例 #5
0
    public void Should_read_a_line_and_convert_to_properly_format()
    {
        var line = "GRU,BRC,10";

        var network = new FlightNetwork();
        var result  = network.LoadFrom(new[] { line });

        Assert.IsFalse(result.HasErrors);
        Assert.IsNotEmpty(network.Hubs);
    }
コード例 #6
0
        private Result CalculateRoute(string from, string to)
        {
            var routes     = RouteFile.ReadFile(CSV_FILE);
            var network    = new FlightNetwork();
            var loadResult = network.LoadFrom(routes);

            if (loadResult.HasErrors)
            {
                return(loadResult);
            }

            return(network.CheapRoute(from, to));
        }
コード例 #7
0
    public void Should_not_import_lines_with_mismatch_format()
    {
        var line = "GRU,BRC,AAA";

        var network = new FlightNetwork();
        var result  = network.LoadFrom(new[] { line });

        Assert.IsTrue(result.HasErrors);

        var expected = "Line [1] input format mismatch 'string, string, uint' > GRU,BRC,AAA";

        Assert.AreEqual(expected, result.Errors.First());
    }
コード例 #8
0
    public void Should_return_error_when_there_arent_connection_between_points()
    {
        var network = new FlightNetwork();
        var lines   = new[] {
            "GRU,BRC,10",
            "BRC,SCL,5",
            "LAX,CDG,75"
        };

        network.LoadFrom(lines);

        var cheapestRoute = network.CheapRoute("GRU", "CDG");

        Assert.IsTrue(cheapestRoute.HasErrors);
        Assert.AreEqual("NO_ROUTE", cheapestRoute.Errors.First());
    }
コード例 #9
0
    public void Should_return_error_when_destination_dont_exists()
    {
        var network = new FlightNetwork();
        var lines   = new[] {
            "LAX,BRC,10",
            "BRC,SCL,5",
            "LAX,CDG,75",
            "LAX,SCL,20",
            "LAX,ORL,56",
            "ORL,CDG,5",
            "SCL,ORL,20"
        };

        network.LoadFrom(lines);

        var cheapestRoute = network.CheapRoute("LAX", "WOW");

        Assert.IsTrue(cheapestRoute.HasErrors);
        Assert.AreEqual("NO_DESTINATION_FOUND > WOW", cheapestRoute.Errors.First());
    }
コード例 #10
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("File with routes must be provided");
            }

            var routes     = RouteFile.ReadFile(args[0]);
            var network    = new FlightNetwork();
            var loadResult = network.LoadFrom(routes);

            if (loadResult.HasErrors)
            {
                Console.WriteLine(string.Join(Environment.NewLine, loadResult.Errors));
            }
            else
            {
                while (true)
                {
                    Console.Write("please enter the route: ");
                    var route = Console.ReadLine();

                    if (!ValidateRoute(route))
                    {
                        Console.WriteLine("Invalid route input format, you should try AAA-AAA");
                        continue;
                    }

                    var splitedRoutes = route.Split("-");
                    var routeResult   = network.CheapRoute(splitedRoutes[0], splitedRoutes[1]);
                    if (routeResult.HasErrors)
                    {
                        Console.WriteLine(string.Join(Environment.NewLine, routeResult.Errors));
                    }
                    else
                    {
                        Console.WriteLine(routeResult.ToString());
                    }
                }
            }
        }
コード例 #11
0
    public void Should_find_shortest_path_from_a_valid_graph()
    {
        var network = new FlightNetwork();
        var lines   = new[] {
            "GRU,BRC,10",
            "BRC,SCL,5",
            "GRU,CDG,75",
            "GRU,SCL,20",
            "GRU,ORL,56",
            "ORL,CDG,5",
            "SCL,ORL,20"
        };

        network.LoadFrom(lines);

        var cheapestRoute = network.CheapRoute("BRC", "CDG");

        Assert.IsFalse(cheapestRoute.HasErrors);
        Assert.AreEqual(30, cheapestRoute.Cost);
        Assert.AreEqual("BRC - SCL - ORL - CDG > $30", cheapestRoute.ToString());
    }
コード例 #12
0
 public void TestCleanup()
 {
     flightNet = null;
 }