private void SolveAndVerifyBoard(string name, IBoard board)
        {
            var solver = SolverCombiner.AllSolvers.Value;

            IEnumerable <BoardChange> changes;

            do
            {
                changes = solver.Solve(board);
                board   = board.ApplyChanges(changes);
            } while (changes.Any());

            Assert.True(BoardChecker.IsBoardCompleted(board), $"Board: {name}\n{BoardASCIIArt.BoardOnlyAsciiArt(board)}");
        }
        public void EntireRowsAndColumnsFilled()
        {
            var board = BoardSamples.Board3
                        .ApplyChanges(
                new BoardChange(0, 0, CellState.Filled),
                new BoardChange(1, 0, CellState.Filled),
                new BoardChange(2, 0, CellState.Filled),
                new BoardChange(2, 1, CellState.Filled),
                new BoardChange(2, 2, CellState.Filled)
                );

            _testOutputHelper.WriteLine(BoardASCIIArt.BoardOnlyAsciiArt(board));
            var solver = new LargestNumberInRuleIsSolvedWrapInBlocked();

            var actualChanges = solver.Solve(board);

            var expected = new List <BoardChange>
            {
                new BoardChange(0, 1, CellState.Blocked),
                new BoardChange(1, 2, CellState.Blocked)
            };

            Assert.Equal(expected, actualChanges);
        }