public void Given_CellCoordinate_When_HorizontalFibonacciNeighborsAreAboveThreshold_Expect_CorrectListCount()
        {
            // Arrange
            var fibonacciSequenceService = new FibonacciNeighborService();
            var fibonacciCheckerService  = Mock.Of <IFibonacciCheckerService>();

            Mock.Get(fibonacciCheckerService).Setup(service => service.IsFibonacci(It.IsAny <int>())).Returns(false);
            var grid = new Grid(fibonacciCheckerService);

            Mock.Get(fibonacciCheckerService).Setup(service => service.IsFibonacci(It.IsAny <int>())).Returns(true);
            var cellsToSetToTrue = Enumerable.Range(1, 9)
                                   .Select(i => Tuple.Create(25, 20 + i))
                                   .ToList();

            foreach (var(rowIndex, columnIndex) in cellsToSetToTrue)
            {
                grid.FibonacciGrid[rowIndex, columnIndex].IncrementGridCellValue(5);
            }

            var cellToCheck = new List <Tuple <int, int> >
            {
                Tuple.Create(25, 25)
            };

            // Act
            var neighbors = fibonacciSequenceService.FindNeighbors(grid, cellToCheck);

            // Assert
            Assert.AreEqual(1, neighbors.Count);
            var horizontal = neighbors.First();

            Assert.AreEqual(9, horizontal.Count);
        }
        public void Given_CellCoordinate_When_FibonacciNeighborsAreBelowThreshold_Expect_EmptyList()
        {
            // Arrange
            var fibonacciSequenceService = new FibonacciNeighborService();
            var fibonacciCheckerService  = Mock.Of <IFibonacciCheckerService>();

            Mock.Get(fibonacciCheckerService).Setup(service => service.IsFibonacci(It.IsAny <int>())).Returns(false);
            var grid = new Grid(fibonacciCheckerService);

            var cellsToSetToFalse = new List <Tuple <int, int> > {
                Tuple.Create(25, 23), Tuple.Create(25, 27), Tuple.Create(24, 25), Tuple.Create(26, 25)
            };

            foreach (var(rowIndex, columnIndex) in cellsToSetToFalse)
            {
                grid.FibonacciGrid[rowIndex, columnIndex].IncrementGridCellValue(4);
            }

            var cellToCheck = new List <Tuple <int, int> >
            {
                Tuple.Create(25, 25)
            };

            // Act
            var neighbors = fibonacciSequenceService.FindNeighbors(grid, cellToCheck);

            // Assert
            Assert.AreEqual(0, neighbors.Count);
        }
        public void Given_CellCoordinate_When_NoNeighborsAreFibonacci_Expect_EmptyList()
        {
            // Arrange
            var fibonacciCheckerService = Mock.Of <IFibonacciCheckerService>();

            Mock.Get(fibonacciCheckerService).Setup(service => service.IsFibonacci(It.IsAny <int>())).Returns(false);
            var grid = new Grid(fibonacciCheckerService);

            foreach (var gridCell in grid.FibonacciGrid)
            {
                gridCell.IncrementGridCellValue(4);
            }

            var fibonacciSequenceService = new FibonacciNeighborService();

            var cellToCheck = new List <Tuple <int, int> >
            {
                Tuple.Create(25, 25)
            };

            // Act
            var neighbors = fibonacciSequenceService.FindNeighbors(grid, cellToCheck);

            // Assert
            Assert.AreEqual(0, neighbors.Count);
        }
        public void BenchmarkApplicationTenTimes()
        {
            // Arrange
            var grid = new Grid(new FibonacciCheckerService());
            var gridCellUpdaterService   = new GridCellUpdaterService();
            var fibonacciNeighborService = new FibonacciNeighborService();
            var fibonacciSequenceService = new FibonacciSequenceService();


            foreach (var i in Enumerable.Range(0, 10))
            {
                // Act
                var stopwatch = new Stopwatch();
                stopwatch.Start();
                gridCellUpdaterService.UpdateCell(grid, 1, 25, 25);
                gridCellUpdaterService.UpdateCell(grid, 1, 26, 27);
                gridCellUpdaterService.UpdateCell(grid, 2, 26, 28);
                gridCellUpdaterService.UpdateCell(grid, 4, 26, 29);
                gridCellUpdaterService.UpdateCell(grid, 7, 26, 30);
                gridCellUpdaterService.UpdateCell(grid, 12, 26, 31);
                var fibonacciCells = gridCellUpdaterService.UpdateCell(grid, 20, 26, 32);

                var fibonacciNeighbors = fibonacciNeighborService.FindNeighbors(grid, fibonacciCells);
                fibonacciSequenceService.FindFibonacciSequences(fibonacciNeighbors);
                stopwatch.Stop();

                // Report
                Console.WriteLine(stopwatch.Elapsed);
            }
        }
        public void Given_ThreeCellCoordinates_When_CheckingSequence_Expect_SixListOfNeighbors()
        {
            // Arrange
            var fibonacciSequenceService = new FibonacciNeighborService();
            var fibonacciCheckerService  = Mock.Of <IFibonacciCheckerService>();

            Mock.Get(fibonacciCheckerService).Setup(service => service.IsFibonacci(It.IsAny <int>())).Returns(true);
            var grid = new Grid(fibonacciCheckerService);

            var cellsToSetToTrue = new List <Tuple <int, int> >();

            foreach (var i in Enumerable.Range(4, 6))
            {
                cellsToSetToTrue.Add(Tuple.Create(20 + i, 25));
                cellsToSetToTrue.Add(Tuple.Create(25, 20 + i));
            }
            foreach (var i in Enumerable.Range(9, 11))
            {
                cellsToSetToTrue.Add(Tuple.Create(20 + i, 30));
                cellsToSetToTrue.Add(Tuple.Create(30, 20 + i));
            }
            foreach (var i in Enumerable.Range(9, 11))
            {
                cellsToSetToTrue.Add(Tuple.Create(30 + i, 40));
                cellsToSetToTrue.Add(Tuple.Create(40, 30 + i));
            }

            foreach (var(rowIndex, columnIndex) in cellsToSetToTrue)
            {
                grid.FibonacciGrid[rowIndex, columnIndex].IncrementGridCellValue(5);
            }

            var cellToCheck = new List <Tuple <int, int> >
            {
                Tuple.Create(25, 25),
                Tuple.Create(30, 30),
                Tuple.Create(40, 40),
            };

            // Act
            var neighbors = fibonacciSequenceService.FindNeighbors(grid, cellToCheck);

            // Assert
            Assert.AreEqual(6, neighbors.Count);
        }
        public void Given_MultipleCellCoordinates_When_HorizontalAndVerticalFibonacciNeighborsAreAboveThreshold_Expect_CorrectNeighborCount()
        {
            // Arrange
            var fibonacciSequenceService = new FibonacciNeighborService();
            var fibonacciCheckerService  = Mock.Of <IFibonacciCheckerService>();

            Mock.Get(fibonacciCheckerService).Setup(service => service.IsFibonacci(It.IsAny <int>())).Returns(true);
            var grid = new Grid(fibonacciCheckerService);

            var cellsToSetToTrue = new List <Tuple <int, int> >();

            foreach (var i in Enumerable.Range(1, 9))
            {
                cellsToSetToTrue.Add(Tuple.Create(20 + i, 25));
                cellsToSetToTrue.Add(Tuple.Create(25, 20 + i));
            }
            foreach (var i in Enumerable.Range(5, 11))
            {
                cellsToSetToTrue.Add(Tuple.Create(10 + i, 10));
                cellsToSetToTrue.Add(Tuple.Create(20, 1 + i));
            }
            foreach (var i in Enumerable.Range(1, 18))
            {
                cellsToSetToTrue.Add(Tuple.Create(30 + i, 48));
                cellsToSetToTrue.Add(Tuple.Create(40, 30 + i));
            }

            foreach (var(rowIndex, columnIndex) in cellsToSetToTrue)
            {
                grid.FibonacciGrid[rowIndex, columnIndex].IncrementGridCellValue(5);
            }

            var cellToCheck = new List <Tuple <int, int> >
            {
                Tuple.Create(25, 25),
                Tuple.Create(20, 10),
                Tuple.Create(40, 48),
            };

            // Act
            var neighbors = fibonacciSequenceService.FindNeighbors(grid, cellToCheck);

            // Assert
            Assert.AreEqual(76, neighbors.SelectMany(neighborList => neighborList).Count());
        }
Пример #7
0
        public void Given_CellCoordinate_When_HorizontalAndVerticalFibonacciNeighborsAreAboveThreshold_Expect_CorrectNeighborCells()
        {
            // Arrange
            var fibonacciCheckerService  = new FibonacciCheckerService();
            var fibonacciNeighborService = new FibonacciNeighborService();

            var grid = new Grid(fibonacciCheckerService);

            var cellsToSetToTrue = GetVerticalCells();

            cellsToSetToTrue.AddRange(GetHorizontalCells());

            foreach (var(rowIndex, columnIndex) in cellsToSetToTrue)
            {
                var gridCell = grid.FibonacciGrid[rowIndex, columnIndex];
                gridCell.IncrementGridCellValue(5);
            }

            var cellsToSetToFalse = new List <Tuple <int, int> > {
                Tuple.Create(20, 25), Tuple.Create(30, 25), Tuple.Create(25, 20), Tuple.Create(25, 30)
            };

            foreach (var(rowIndex, columnIndex) in cellsToSetToFalse)
            {
                grid.FibonacciGrid[rowIndex, columnIndex].IncrementGridCellValue(4);
            }

            var cellToCheck = new List <Tuple <int, int> >
            {
                Tuple.Create(25, 25)
            };

            // Act
            var neighbors  = fibonacciNeighborService.FindNeighbors(grid, cellToCheck);
            var vertical   = neighbors.First();
            var horizontal = neighbors.Skip(1).First();

            // Assert
            Assert.AreEqual(9, horizontal.Count);
            horizontal.ForEach(cell => Assert.AreEqual(5, cell.Value));

            Assert.AreEqual(9, vertical.Count);
            vertical.ForEach(cell => Assert.AreEqual(5, cell.Value));
        }
Пример #8
0
        public void Given_Grid_When_IncrementingWithOne_Expect_ZeroFibonacciSequences()
        {
            // Arrange
            var grid = new Grid(new FibonacciCheckerService());
            var gridCellUpdaterService   = new GridCellUpdaterService();
            var fibonacciNeighborService = new FibonacciNeighborService();
            var fibonacciSequenceService = new FibonacciSequenceService();

            const int rowIndex    = 25;
            const int columnIndex = 25;

            // Act
            var fibonacciCells     = gridCellUpdaterService.UpdateCell(grid, 1, rowIndex, columnIndex);
            var fibonacciNeighbors = fibonacciNeighborService.FindNeighbors(grid, fibonacciCells);
            var sequenceCells      = fibonacciSequenceService.FindFibonacciSequences(fibonacciNeighbors);

            // Assert
            Assert.AreEqual(0, sequenceCells.Count());
        }
Пример #9
0
        public void Given_Grid_When_IncrementingCellsToAFibonacciSequence_Expect_FiveGridCellsInList()
        {
            // Arrange
            var grid = new Grid(new FibonacciCheckerService());
            var gridCellUpdaterService   = new GridCellUpdaterService();
            var fibonacciNeighborService = new FibonacciNeighborService();
            var fibonacciSequenceService = new FibonacciSequenceService();

            // Act
            gridCellUpdaterService.UpdateCell(grid, 1, 25, 25);
            gridCellUpdaterService.UpdateCell(grid, 1, 26, 27);
            gridCellUpdaterService.UpdateCell(grid, 2, 26, 28);
            var fibonacciCells = gridCellUpdaterService.UpdateCell(grid, 4, 26, 29);

            var fibonacciNeighbors = fibonacciNeighborService.FindNeighbors(grid, fibonacciCells);
            var sequenceCells      = fibonacciSequenceService.FindFibonacciSequences(fibonacciNeighbors);

            // Assert
            Assert.AreEqual(5, sequenceCells.Count());
        }