test_sudoku_solver.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. from sandbox import sudoku_solver
  2. board_1 = [
  3. ".1.82....",
  4. "...3.6...",
  5. "54..7....",
  6. "..2...95.",
  7. "7.52..1.4",
  8. ".89...2..",
  9. "....8..79",
  10. "...5.3...",
  11. "...792.3.",
  12. ]
  13. solution_1 = [
  14. "317825496",
  15. "298346715",
  16. "546971328",
  17. "432618957",
  18. "765239184",
  19. "189457263",
  20. "623184579",
  21. "971563842",
  22. "854792631",
  23. ]
  24. board_2 = [
  25. "16...7.9.",
  26. ".281.967.",
  27. ".....82..",
  28. "...7....4",
  29. "....6....",
  30. "5....3...",
  31. "..75.....",
  32. ".869.173.",
  33. ".4.3...86",
  34. ]
  35. solution_2 = [
  36. "163427598",
  37. "428159673",
  38. "759638241",
  39. "632795814",
  40. "891264357",
  41. "574813962",
  42. "317586429",
  43. "286941735",
  44. "945372186",
  45. ]
  46. board_3 = [
  47. "..1..8763",
  48. "8..9.....",
  49. "....1..5.",
  50. ".8....4..",
  51. "1.54.3...",
  52. ".6....2..",
  53. "....6..2.",
  54. "4..8.....",
  55. "..6..1378",
  56. ]
  57. solution_3 = [
  58. "941258763",
  59. "857936142",
  60. "632714859",
  61. "789625431",
  62. "125483697",
  63. "364179285",
  64. "518367924",
  65. "473892516",
  66. "296541378",
  67. ]
  68. empty = ["." * 9 for i in range(9)]
  69. def test_simple():
  70. board = sudoku_solver.Board()
  71. board.set_initial(board_1)
  72. row = board.get_row(0)
  73. assert row == board_1[0]
  74. col = board.get_col(0)
  75. assert col == "..5.7...."
  76. block = board.get_block(0, 0)
  77. assert block == [".1.", "...", "54."]
  78. block = board.get_block(4, 6)
  79. assert block == ["95.", "1.4", "2.."]
  80. def test_simple_set():
  81. board = sudoku_solver.Board()
  82. board.set_initial(board_1)
  83. board.set_cell(5, 7, "6")
  84. row = board.get_row(5)
  85. assert row == ".89...26."
  86. def test_possibilities():
  87. board = sudoku_solver.Board()
  88. board.set_initial(board_1)
  89. p = board.get_possibilities(1, 4)
  90. assert p == {"1", "4", "5"}
  91. def test_all_possibilities():
  92. board = sudoku_solver.Board()
  93. board.set_initial(board_1)
  94. p = board.get_all_possibilities()
  95. assert p[1][4] == {"1", "4", "5"}
  96. def test_unique_cell():
  97. board = sudoku_solver.Board()
  98. board.set_initial(board_1)
  99. solving_steps = [
  100. (5, 7, "6"),
  101. (4, 7, "8"),
  102. (4, 5, "9"),
  103. (2, 5, "1"),
  104. (2, 3, "9"),
  105. (2, 7, "2"),
  106. (6, 5, "4"),
  107. (0, 5, "5"),
  108. (1, 4, "4"),
  109. ]
  110. for x, y, v in solving_steps:
  111. cell = board.get_unique_cell()
  112. assert cell == (x, y)
  113. board.set_cell(x, y, v)
  114. def test_solve():
  115. board = sudoku_solver.Board()
  116. board.set_initial(board_2)
  117. b = board.solve()
  118. assert b == solution_2
  119. board = sudoku_solver.Board()
  120. board.set_initial(board_1)
  121. b = board.solve()
  122. assert b == solution_1
  123. board = sudoku_solver.Board()
  124. board.set_initial(board_3)
  125. b = board.solve()
  126. assert b == solution_3