public void Visit_FloodSpillerAnd3x3OpenArea_All9PositionsAreAddedToResultAndFirstElementIsStartingPosition()
        {
            var startingPosition = new Position(1, 1);

            int[,] matrix = new int[3, 3];
            int positionsCount                = matrix.Length;
            var addToListProcessor            = new AddToListPositionVisitor();
            Action <int, int> positionVisitor = addToListProcessor.Visit;
            var parameters = new FloodParameters(startingPosition.X, startingPosition.Y)
            {
                ProcessStartAsFirstNeighbour = true,
                SpreadingPositionVisitor     = positionVisitor
            };
            FloodSpiller spiller = new FloodSpiller();

            spiller.SpillFlood(parameters, matrix);

            addToListProcessor.Result.Count.Should().Be(positionsCount);
            addToListProcessor.Result.First().Should().Be(startingPosition);
            for (int x = 0; x < matrix.GetLength(0); x++)
            {
                for (int y = 0; y < matrix.GetLength(1); y++)
                {
                    addToListProcessor.Result.Should().Contain(new Position(x, y));
                }
            }
        }
        public void Visit_FloodScanlineSpillerAnd3x3OpenArea_SomePositionsAreAddedToResultAndFirstElementIsStartingPosition()
        {
            var startingPosition = new Position(1, 1);

            int[,] matrix = new int[3, 3];
            var addToListProcessor            = new AddToListPositionVisitor();
            Action <int, int> positionVisitor = addToListProcessor.Visit;
            var parameters = new FloodParameters(startingPosition.X, startingPosition.Y)
            {
                ProcessStartAsFirstNeighbour = true,
                SpreadingPositionVisitor     = positionVisitor
            };
            FloodSpiller spiller = new FloodSpiller();

            spiller.SpillFlood(parameters, matrix);

            // scanline doesn't visit all processed neigbhours, so we can only assume that at least one position will be visited
            addToListProcessor.Result.Count.Should().BeGreaterOrEqualTo(1);
            addToListProcessor.Result.First().Should().Be(startingPosition);
        }