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