def test_complete_solver(self):
        s = SudokuSolver()
        # 5 3 0 0 7 0 0 0 0
        # 6 0 0 1 9 5 0 0 0
        # 0 9 8 0 0 0 0 6 0
        # 8 0 0 0 6 0 0 0 3
        # 4 0 0 8 0 3 0 0 1
        # 7 0 0 0 2 0 0 0 6
        # 0 6 0 0 0 0 2 8 0
        # 0 0 0 4 1 9 0 0 5
        # 0 0 0 0 8 0 0 7 9

        s.add_filled_number(8, 4, 8)
        s.add_filled_number(8, 7, 7)
        s.add_filled_number(8, 8, 9)

        s.add_filled_number(7, 3, 4)
        s.add_filled_number(7, 4, 1)
        s.add_filled_number(7, 5, 9)
        s.add_filled_number(7, 8, 5)

        s.add_filled_number(6, 1, 6)
        s.add_filled_number(6, 6, 2)
        s.add_filled_number(6, 7, 8)

        s.add_filled_number(5, 0, 7)
        s.add_filled_number(5, 4, 2)
        s.add_filled_number(5, 8, 6)

        s.add_filled_number(4, 0, 4)
        s.add_filled_number(4, 3, 8)
        s.add_filled_number(4, 5, 3)
        s.add_filled_number(4, 8, 1)

        s.add_filled_number(3, 0, 8)
        s.add_filled_number(3, 4, 6)
        s.add_filled_number(3, 8, 3)

        s.add_filled_number(2, 1, 9)
        s.add_filled_number(2, 2, 8)
        s.add_filled_number(2, 7, 6)

        s.add_filled_number(1, 0, 6)
        s.add_filled_number(1, 3, 1)
        s.add_filled_number(1, 4, 9)
        s.add_filled_number(1, 5, 5)

        s.add_filled_number(0, 0, 5)
        s.add_filled_number(0, 1, 3)
        s.add_filled_number(0, 4, 7)

        grid = s.solve()
        if len(grid) == 0:
            print("not solvable")
        else:
            print(grid)
        solution = [[5, 3, 4, 6, 7, 8, 9, 1, 2], [6, 7, 2, 1, 9, 5, 3, 4, 8],
                    [1, 9, 8, 3, 4, 2, 5, 6, 7], [8, 5, 9, 7, 6, 1, 4, 2, 3],
                    [4, 2, 6, 8, 5, 3, 7, 9, 1], [7, 1, 3, 9, 2, 4, 8, 5, 6],
                    [9, 6, 1, 5, 3, 7, 2, 8, 4], [2, 8, 7, 4, 1, 9, 6, 3, 5],
                    [3, 4, 5, 2, 8, 6, 1, 7, 9]]
        self.assertEqual(grid, solution)
def add_grid_to_solver(s: solver.SudokuSolver, grid):
    for r in enumerate(grid):
        for c in enumerate(r[1]):
            if c[1]:
                s.add_filled_number(r[0], c[0], c[1])