def test_soduku_to_solve_is_invalid_when_contains_less_than_81_numbers(self):
     sudoku_test_only_numbers  = BacktrakingAlgorithm("092300000\n" + \
                                                      "000080100\n" + \
                                                      "000000000\n" + \
                                                      "107040000\n" + \
                                                      "000000065\n" + \
                                                      "800000000\n" + \
                                                      "060502000\n", "0")
             
     self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_return_true_if_num_is_already_in_col(self):
     sudoku_test_col = BacktrakingAlgorithm("092300000","0")
     square = [['3', '0', '6', '5', '0', '8', '4', '0', '0'],
               ['5', '2', '0', '0', '0', '4', '0', '0', '0'],
               ['0', '8', '7', '0', '0', '1', '0', '3', '1'],
               ['0', '0', '3', '0', '1', '2', '0', '8', '0'],
               ['9', '0', '0', '8', '6', '3', '0', '0', '5'],
               ['0', '5', '0', '0', '9', '0', '6', '0', '0'],
               ['1', '3', '0', '0', '0', '0', '2', '5', '0'],
               ['0', '0', '0', '0', '0', '0', '0', '7', '4'],
               ['0', '0', '5', '2', '0', '6', '3', '0', '0']];
     self.assertTrue(sudoku_test_col.used_in_col(square, 5, 8))
 def test_return_false_if_num_is_not_in_col(self):
     sudoku_test_box = BacktrakingAlgorithm("092300000","0")
     square = [['3', '0', '6', '5', '0', '8', '4', '0', '0'],
               ['5', '2', '0', '0', '0', '0', '0', '0', '0'],
               ['0', '8', '7', '0', '0', '1', '0', '3', '1'],
               ['0', '0', '3', '0', '1', '0', '0', '8', '0'],
               ['9', '0', '0', '8', '6', '3', '0', '0', '5'],
               ['0', '5', '0', '0', '9', '0', '6', '0', '0'],
               ['1', '3', '0', '0', '0', '0', '2', '5', '0'],
               ['0', '0', '0', '0', '0', '0', '0', '7', '4'],
               ['0', '0', '5', '2', '0', '6', '3', '0', '0']];
     self.assertFalse(sudoku_test_box.used_in_col(square, 8, 9))    
 def test_soduku_to_solve_not_contain_spaces_as_empty_value_if_the_empty_value_is_zero(self):
     sudoku_test_only_numbers  = BacktrakingAlgorithm(" 923     \n" + \
                                                      "    8 1  \n" + \
                                                      "      1  \n" + \
                                                      "1 7 4    \n" + \
                                                      "      465\n" + \
                                                      "8        \n" + \
                                                      " 6 5 2   \n" + \
                                                      "4     2  \n" + \
                                                      "   9     \n", "0")
             
     self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_return_true_if_num_is_already_in_col(self):
     sudoku_test_col = BacktrakingAlgorithm("092300000", "0")
     square = [['3', '0', '6', '5', '0', '8', '4', '0', '0'],
               ['5', '2', '0', '0', '0', '4', '0', '0', '0'],
               ['0', '8', '7', '0', '0', '1', '0', '3', '1'],
               ['0', '0', '3', '0', '1', '2', '0', '8', '0'],
               ['9', '0', '0', '8', '6', '3', '0', '0', '5'],
               ['0', '5', '0', '0', '9', '0', '6', '0', '0'],
               ['1', '3', '0', '0', '0', '0', '2', '5', '0'],
               ['0', '0', '0', '0', '0', '0', '0', '7', '4'],
               ['0', '0', '5', '2', '0', '6', '3', '0', '0']]
     self.assertTrue(sudoku_test_col.used_in_col(square, 5, 8))
    def test_soduku_to_solve_is_invalid_when_contains_less_than_81_numbers(
            self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """092300000
000080100
000000000
107040000
000000065
800000000
060502000""", "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_return_false_if_num_is_not_in_col(self):
     sudoku_test_box = BacktrakingAlgorithm("092300000", "0")
     square = [['3', '0', '6', '5', '0', '8', '4', '0', '0'],
               ['5', '2', '0', '0', '0', '0', '0', '0', '0'],
               ['0', '8', '7', '0', '0', '1', '0', '3', '1'],
               ['0', '0', '3', '0', '1', '0', '0', '8', '0'],
               ['9', '0', '0', '8', '6', '3', '0', '0', '5'],
               ['0', '5', '0', '0', '9', '0', '6', '0', '0'],
               ['1', '3', '0', '0', '0', '0', '2', '5', '0'],
               ['0', '0', '0', '0', '0', '0', '0', '7', '4'],
               ['0', '0', '5', '2', '0', '6', '3', '0', '0']]
     self.assertFalse(sudoku_test_box.used_in_col(square, 8, 9))
 def test_soduku_to_solve_is_valid_when_characters_to_replace_are_porcentage(self):
     sudoku_test_only_numbers  = BacktrakingAlgorithm("%923%%%%%\n" + \
                                                      "%%%%8%1%%\n" + \
                                                      "%%%%%%%%%\n" + \
                                                      "1%7%4%%%%\n" + \
                                                      "%%%%%%%65\n" + \
                                                      "8%%%%%%%%\n" + \
                                                      "%6%5%2%%%\n" + \
                                                      "4%%%%%7%%\n" + \
                                                      "%%%9%%%%%\n", "%")
             
     self.assertTrue(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_soduku_to_solve_cannot_contain_dot_as_empty_value_if_the_empty_value_is_zero(self):
     sudoku_test_only_numbers  = BacktrakingAlgorithm("092300000\n" + \
                                                      "....80100\n" + \
                                                      "...000000\n" + \
                                                      "107040000\n" + \
                                                      "..0..0465\n" + \
                                                      "800000000\n" + \
                                                      "060502000\n" + \
                                                      "400000200\n" + \
                                                      "000900000\n", "0")
             
     self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_soduku_to_solve_cannot_contain_letters(self):
     sudoku_test_only_numbers  = BacktrakingAlgorithm("092300000\n" + \
                                                      "000080100\n" + \
                                                      "000000000\n" + \
                                                      "107040000\n" + \
                                                      "000000A65\n" + \
                                                      "800000000\n" + \
                                                      "060502000\n" + \
                                                      "400000C00\n" + \
                                                      "000900000\n", "0")
             
     self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_soduku_to_solve_only_contains_numbers(self):
     sudoku_test_only_numbers  = BacktrakingAlgorithm("092300000\n" + \
                                                      "000080100\n" + \
                                                      "000000000\n" + \
                                                      "107040000\n" + \
                                                      "000000065\n" + \
                                                      "800000000\n" + \
                                                      "060502000\n" + \
                                                      "400000700\n" + \
                                                      "000900000\n", "0")
             
     self.assertTrue(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_find_unassigned_location_returns_false_when_no_empty_place(self):
     sudoku_test_unassigned = BacktrakingAlgorithm("092300000", ".")
     square = [['3', '5', '6', '5', '7', '8', '4', '6', '1'],
               ['5', '2', '2', '2', '1', '4', '9', '3', '2'],
               ['2', '8', '7', '5', '2', '1', '2', '3', '1'],
               ['3', '8', '3', '3', '1', '2', '2', '8', '8'],
               ['9', '2', '1', '8', '6', '3', '7', '7', '5'],
               ['4', '5', '1', '6', '9', '3', '6', '1', '1'],
               ['1', '3', '2', '5', '9', '2', '2', '5', '3'],
               ['5', '9', '2', '3', '2', '1', '4', '7', '4'],
               ['6', '8', '5', '2', '1', '6', '3', '8', '7']];
     row, col, bol = sudoku_test_unassigned.find_unassigned_location(square)
     self.assertFalse(bol)
    def test_soduku_to_solve_only_contains_numbers(self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """092300000
000080100
000000000
107040000
000000065
800000000
060502000
400000700
000900000""", "0")

        self.assertTrue(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_find_unassigned_location_returns_false_when_no_empty_place(self):
     sudoku_test_unassigned = BacktrakingAlgorithm("092300000", ".")
     square = [['3', '5', '6', '5', '7', '8', '4', '6', '1'],
               ['5', '2', '2', '2', '1', '4', '9', '3', '2'],
               ['2', '8', '7', '5', '2', '1', '2', '3', '1'],
               ['3', '8', '3', '3', '1', '2', '2', '8', '8'],
               ['9', '2', '1', '8', '6', '3', '7', '7', '5'],
               ['4', '5', '1', '6', '9', '3', '6', '1', '1'],
               ['1', '3', '2', '5', '9', '2', '2', '5', '3'],
               ['5', '9', '2', '3', '2', '1', '4', '7', '4'],
               ['6', '8', '5', '2', '1', '6', '3', '8', '7']]
     row, col, bol = sudoku_test_unassigned.find_unassigned_location(square)
     self.assertFalse(bol)
    def test_soduku_to_solve_cannot_contain_letters(self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """092300000
000080100
000000000
107040000
000000A65
800000000
060502000
400000C00
000900000""", "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_cannot_contain_dot_as_empty_value_if_the_empty_value_is_zero(
            self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """092300000
....80100
...000000
107040000
..0..0465
800000000
060502000
400000200
000900000""", "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_not_contain_spaces_as_empty_value_if_the_empty_value_is_zero(
            self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """ 923    
    8 1  
      1
1 7 4
      465
8        
 6 5 2   
4     2  
   9      """, "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_is_valid_when_characters_to_replace_are_porcentage(
            self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """%923%%%%%
%%%%8%1%%
%%%%%%%%%
1%7%4%%%%
%%%%%%%65
8%%%%%%%%
%6%5%2%%%
4%%%%%7%%
%%%9%%%%%""", "%")

        self.assertTrue(sudoku_test_only_numbers.sudoku_data_is_valid())
 def test_find_unassigned_location_returns_correct_place_unassigned_value(self):
     sudoku_test_unassigned = BacktrakingAlgorithm("092300000", "0")
     square = [['3', '5', '6', '5', '7', '8', '4', '6', '1'],
               ['5', '2', '2', '2', '1', '4', '9', '3', '2'],
               ['2', '8', '7', '5', '2', '1', '2', '3', '1'],
               ['3', '8', '3', '0', '1', '2', '2', '8', '0'],
               ['9', '2', '1', '8', '6', '3', '7', '0', '5'],
               ['4', '5', '1', '6', '9', '0', '6', '0', '0'],
               ['1', '3', '2', '5', '0', '0', '2', '5', '0'],
               ['5', '9', '2', '3', '0', '0', '0', '7', '4'],
               ['6', '8', '5', '2', '0', '6', '3', '0', '0']];
     row, col, bol = sudoku_test_unassigned.find_unassigned_location(square)
     self.assertEquals(3, row)
     self.assertEquals(3, col)
     self.assertTrue(bol)
 def test_find_unassigned_location_returns_correct_place_unassigned_value(
         self):
     sudoku_test_unassigned = BacktrakingAlgorithm("092300000", "0")
     square = [['3', '5', '6', '5', '7', '8', '4', '6', '1'],
               ['5', '2', '2', '2', '1', '4', '9', '3', '2'],
               ['2', '8', '7', '5', '2', '1', '2', '3', '1'],
               ['3', '8', '3', '0', '1', '2', '2', '8', '0'],
               ['9', '2', '1', '8', '6', '3', '7', '0', '5'],
               ['4', '5', '1', '6', '9', '0', '6', '0', '0'],
               ['1', '3', '2', '5', '0', '0', '2', '5', '0'],
               ['5', '9', '2', '3', '0', '0', '0', '7', '4'],
               ['6', '8', '5', '2', '0', '6', '3', '0', '0']]
     row, col, bol = sudoku_test_unassigned.find_unassigned_location(square)
     self.assertEquals(3, row)
     self.assertEquals(3, col)
     self.assertTrue(bol)
Exemple #21
0
    def create_algorith_to_solve_sudoku(self, sudoku_matrix, empty_character):
        """ Method used for create the algorithm to solve given the expected sudoku matrix 
            and empty character
            
            Keyword arguments:
            sudoku_matrix -- stores the sudoku in the valid matrix ready to be solved
            empty_character -- stores the selected character for the empty spots 

        """

        algorithm_selected = self.configuration.get_algorithm()
        algoritms = []
        for i in range(0, len(sudoku_matrix)):
            algoritm_to_solve = Algorithm(sudoku_matrix[i][0], empty_character)
            if algorithm_selected == 'norvig':
                algoritm_to_solve = NorvigAlgorithm(sudoku_matrix[i][0],
                                                    empty_character)
            elif algorithm_selected == 'backtracking':
                algoritm_to_solve = BacktrakingAlgorithm(
                    sudoku_matrix[i][0], empty_character)
            elif algorithm_selected == 'brute force':
                algoritm_to_solve = BruteForceAlgorithm(
                    sudoku_matrix[i][0], empty_character)
            algoritms.append(algoritm_to_solve)
        return algoritms
    def test_soduku_to_solve_is_valid_when_characters_to_replace_are_dot(self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """.923.....
....8.1..
.........
1.7.4....
.......65
8........
.6.5.2...
4.....7..
...9.....""", ".")
    def test_verify_solution_easy_sudoku_empty_values_with_zero(self):
        raw_sudoku = ("""000000680
000073009
309000045
490000000
803050902
000000036
960000308
700680000
028000000""")
        sudoku_test_solve = BacktrakingAlgorithm(raw_sudoku, "0")
        square_result = [['1', '7', '2', '5', '4', '9', '6', '8', '3'],
                         ['6', '4', '5', '8', '7', '3', '2', '1', '9'],
                         ['3', '8', '9', '2', '6', '1', '7', '4', '5'],
                         ['4', '9', '6', '3', '2', '7', '8', '5', '1'],
                         ['8', '1', '3', '4', '5', '6', '9', '7', '2'],
                         ['2', '5', '7', '1', '9', '8', '4', '3', '6'],
                         ['9', '6', '4', '7', '1', '5', '3', '2', '8'],
                         ['7', '3', '1', '6', '8', '2', '5', '9', '4'],
                         ['5', '2', '8', '9', '3', '4', '1', '6', '7']]
        self.assertEquals(square_result, sudoku_test_solve.solve_sudoku())
 def test_verify_solution_easy_sudoku_empty_values_with_zero(self):
     raw_sudoku  = ("000000680\n" + \
                    "000073009\n" + \
                    "309000045\n" + \
                    "490000000\n" + \
                    "803050902\n" + \
                    "000000036\n" + \
                    "960000308\n" + \
                    "700680000\n" + \
                    "028000000\n")
     sudoku_test_solve = BacktrakingAlgorithm(raw_sudoku, "0")
     square_result = [['1', '7', '2', '5', '4', '9', '6', '8', '3'],
                      ['6', '4', '5', '8', '7', '3', '2', '1', '9'],
                      ['3', '8', '9', '2', '6', '1', '7', '4', '5'],
                      ['4', '9', '6', '3', '2', '7', '8', '5', '1'],
                      ['8', '1', '3', '4', '5', '6', '9', '7', '2'],
                      ['2', '5', '7', '1', '9', '8', '4', '3', '6'],
                      ['9', '6', '4', '7', '1', '5', '3', '2', '8'],
                      ['7', '3', '1', '6', '8', '2', '5', '9', '4'],
                      ['5', '2', '8', '9', '3', '4', '1', '6', '7']]
     self.assertEquals(square_result, sudoku_test_solve.solve_sudoku())
    def test_verify_solution_easy_sudoku_empty_values_with_dot(self):
        raw_sudoku = ("""3.65.84..
52.......
.87....31
..3.1..8.
9..863..5
.5..9.6..
13....25.
.......74
..52.63..""")
        sudoku_test_solve = BacktrakingAlgorithm(raw_sudoku, ".")
        square_result = [['3', '1', '6', '5', '7', '8', '4', '9', '2'],
                         ['5', '2', '9', '1', '3', '4', '7', '6', '8'],
                         ['4', '8', '7', '6', '2', '9', '5', '3', '1'],
                         ['2', '6', '3', '4', '1', '5', '9', '8', '7'],
                         ['9', '7', '4', '8', '6', '3', '1', '2', '5'],
                         ['8', '5', '1', '7', '9', '2', '6', '4', '3'],
                         ['1', '3', '8', '9', '4', '7', '2', '5', '6'],
                         ['6', '9', '2', '3', '5', '1', '8', '7', '4'],
                         ['7', '4', '5', '2', '8', '6', '3', '1', '9']]

        self.assertEquals(square_result, sudoku_test_solve.solve_sudoku())
 def test_verify_solution_easy_sudoku_empty_values_with_dot(self):
     raw_sudoku  = ("3.65.84..\n" + \
                    "52.......\n" + \
                    ".87....31\n" + \
                    "..3.1..8.\n" + \
                    "9..863..5\n" + \
                    ".5..9.6..\n" + \
                    "13....25.\n" + \
                    ".......74\n" + \
                    "..52.63..\n")
     sudoku_test_solve = BacktrakingAlgorithm(raw_sudoku, ".")
     square_result = [['3', '1', '6', '5', '7', '8', '4', '9', '2'],
                      ['5', '2', '9', '1', '3', '4', '7', '6', '8'],
                      ['4', '8', '7', '6', '2', '9', '5', '3', '1'],
                      ['2', '6', '3', '4', '1', '5', '9', '8', '7'],
                      ['9', '7', '4', '8', '6', '3', '1', '2', '5'],
                      ['8', '5', '1', '7', '9', '2', '6', '4', '3'],
                      ['1', '3', '8', '9', '4', '7', '2', '5', '6'],
                      ['6', '9', '2', '3', '5', '1', '8', '7', '4'],
                      ['7', '4', '5', '2', '8', '6', '3', '1', '9']];
       
     self.assertEquals(square_result, sudoku_test_solve.solve_sudoku()) 
    def test_convert_raw_sudoku_matrix_empty_values_0(self):
        raw_sudoku = ("""092300000
000080100
000000000
107040000
000000065
800000000
060502000
400000700
000900000""")
        sudoku_test_convert = BacktrakingAlgorithm("092300000", "0")
        square_result = [['0', '9', '2', '3', '0', '0', '0', '0', '0'],
                         ['0', '0', '0', '0', '8', '0', '1', '0', '0'],
                         ['0', '0', '0', '0', '0', '0', '0', '0', '0'],
                         ['1', '0', '7', '0', '4', '0', '0', '0', '0'],
                         ['0', '0', '0', '0', '0', '0', '0', '6', '5'],
                         ['8', '0', '0', '0', '0', '0', '0', '0', '0'],
                         ['0', '6', '0', '5', '0', '2', '0', '0', '0'],
                         ['4', '0', '0', '0', '0', '0', '7', '0', '0'],
                         ['0', '0', '0', '9', '0', '0', '0', '0', '0']]

        self.assertEquals(square_result,
                          sudoku_test_convert.get_grid_values(raw_sudoku))
    def test_convert_raw_sudoku_matrix_empty_values_dot(self):
        raw_sudoku = (""".923.....
....8.1..
.........
1.7.4....
.......65
8........
.6.5.2...
4.....7..
...9.....""")
        sudoku_test_convert = BacktrakingAlgorithm("092300000", ".")
        square_result = [['.', '9', '2', '3', '.', '.', '.', '.', '.'],
                         ['.', '.', '.', '.', '8', '.', '1', '.', '.'],
                         ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
                         ['1', '.', '7', '.', '4', '.', '.', '.', '.'],
                         ['.', '.', '.', '.', '.', '.', '.', '6', '5'],
                         ['8', '.', '.', '.', '.', '.', '.', '.', '.'],
                         ['.', '6', '.', '5', '.', '2', '.', '.', '.'],
                         ['4', '.', '.', '.', '.', '.', '7', '.', '.'],
                         ['.', '.', '.', '9', '.', '.', '.', '.', '.']]

        self.assertEquals(square_result,
                          sudoku_test_convert.get_grid_values(raw_sudoku))
    def test_soduku_to_solve_is_invalid_when_contains_more_than_81_numbers(
            self):
        sudoku_test_only_numbers = BacktrakingAlgorithm(
            """092300000
000080100
000000000
107040000
000000065
800000000
060502000
400000700
000900000
000000065
060502000""", "0")
    def test_convert_raw_sudoku_matrix_empty_values_dot(self):
        raw_sudoku  = (".923.....\n" + \
                       "....8.1..\n" + \
                       ".........\n" + \
                       "1.7.4....\n" + \
                       ".......65\n" + \
                       "8........\n" + \
                       ".6.5.2...\n" + \
                       "4.....7..\n" + \
                       "...9.....\n")
        sudoku_test_convert = BacktrakingAlgorithm("092300000", ".")
        square_result = [['.', '9', '2', '3', '.', '.', '.', '.', '.'],
                         ['.', '.', '.', '.', '8', '.', '1', '.', '.'],
                         ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
                         ['1', '.', '7', '.', '4', '.', '.', '.', '.'],
                         ['.', '.', '.', '.', '.', '.', '.', '6', '5'],
                         ['8', '.', '.', '.', '.', '.', '.', '.', '.'],
                         ['.', '6', '.', '5', '.', '2', '.', '.', '.'],
                         ['4', '.', '.', '.', '.', '.', '7', '.', '.'],
                         ['.', '.', '.', '9', '.', '.', '.', '.', '.']];

        self.assertEquals(square_result,
                          sudoku_test_convert.get_grid_values(raw_sudoku))
    def test_convert_raw_sudoku_matrix_empty_values_0(self):
        raw_sudoku  = ("092300000\n" + \
                       "000080100\n" + \
                       "000000000\n" + \
                       "107040000\n" + \
                       "000000065\n" + \
                       "800000000\n" + \
                       "060502000\n" + \
                       "400000700\n" + \
                       "000900000\n")
        sudoku_test_convert = BacktrakingAlgorithm("092300000", "0")
        square_result = [['0', '9', '2', '3', '0', '0', '0', '0', '0'],
                         ['0', '0', '0', '0', '8', '0', '1', '0', '0'],
                         ['0', '0', '0', '0', '0', '0', '0', '0', '0'],
                         ['1', '0', '7', '0', '4', '0', '0', '0', '0'],
                         ['0', '0', '0', '0', '0', '0', '0', '6', '5'],
                         ['8', '0', '0', '0', '0', '0', '0', '0', '0'],
                         ['0', '6', '0', '5', '0', '2', '0', '0', '0'],
                         ['4', '0', '0', '0', '0', '0', '7', '0', '0'],
                         ['0', '0', '0', '9', '0', '0', '0', '0', '0']];

        self.assertEquals(square_result,
                          sudoku_test_convert.get_grid_values(raw_sudoku))
 def test_generate_sudoku_pattern_by_complexity_returns_solvable_sudoku_hard(self):
     self.test_generator.generate_sudoku_pattern_by_complexity(40, 50, '.')
     raw_sudoku_string = self.test_generator.get_board_format_to_string(self.test_generator.sudoku_pattern)
     sudoku_test_solve = BacktrakingAlgorithm(raw_sudoku_string, ".")
     self.assertTrue(sudoku_test_solve.solve_sudoku())
 def test_return_true_if_num_is_already_in_box(self):
     sudoku_test_box = BacktrakingAlgorithm("092300000", "0")
     square = [['1', '4', '8'], ['2', '7', '6'], ['5', '3', '0']]
     self.assertTrue(sudoku_test_box.used_in_box(square, 0, 0, 1))
 def test_return_true_if_num_is_already_in_box(self):
     sudoku_test_box = BacktrakingAlgorithm("092300000", "0")
     square = [['1', '4', '8'], ['2', '7', '6'], ['5', '3', '0']]
     self.assertTrue(sudoku_test_box.used_in_box(square, 0, 0, 1))