public void Navigate_PerformanceTest()
        {
            var sut = new TileNavigator(
                new EmptyBlockedProvider(),
                new DiagonalNeighborProvider(),
                new PythagorasAlgorithm(),
                new ManhattanHeuristicAlgorithm()
                );

            var from = new Tile(0, 0);
            var to   = new Tile(4000, 4000);

            var result = sut.Navigate(from, to);

            Assert.That(result.Count(), Is.EqualTo(4000));
        }
        public void Navigate_WhenRouteIsBlocked_ReturnsNull()
        {
            var blockedMock = new Mock <IBlockedProvider>();

            blockedMock
            .Setup(m => m.IsBlocked(It.IsAny <Tile>()))
            .Returns(true);

            var sut = new TileNavigator(
                blockedMock.Object,
                new DiagonalNeighborProvider(),
                new PythagorasAlgorithm(),
                new ManhattanHeuristicAlgorithm()
                );

            var from = new Tile(0, 0);
            var to   = new Tile(2, 2);

            var result = sut.Navigate(from, to);

            Assert.That(result, Is.EqualTo(null));
        }
        public void Navigate_WhenDiagonal_ReturnsExpectedValues()
        {
            var sut = new TileNavigator(
                new EmptyBlockedProvider(),
                new DiagonalNeighborProvider(),
                new PythagorasAlgorithm(),
                new ManhattanHeuristicAlgorithm()
                );

            var from = new Tile(0, 0);
            var to   = new Tile(2, 2);

            var result = sut.Navigate(from, to);

            var expected = new[]
            {
                new Tile(1, 1),
                new Tile(2, 2)
            };

            Assert.That(result, Is.EquivalentTo(expected));
        }