Current section

Files

Jump to
inplace test examples sudoku_test.exs
Raw

test/examples/sudoku_test.exs

defmodule InPlace.Examples.SudokuTest do
use ExUnit.Case
alias InPlace.Examples.Sudoku
import CPSolver.Test.Helpers
describe "4x4" do
test "instance with two solutions" do
Sudoku.solve(Sudoku.instance4(), solution_handler: async_solution_handler(), stop_on: false)
solutions = flush()
assert length(solutions) == 2
assert Enum.all?(solutions, &Sudoku.check_solution/1)
end
end
describe "9x9" do
test "easy" do
Sudoku.solve(Sudoku.instance29a_knuth(), solution_handler: async_solution_handler())
solutions = flush()
assert length(solutions) == 1
assert Enum.all?(solutions, &Sudoku.check_solution/1)
end
test "'hard' and 'clue17'" do
assert Enum.all?([hard(), clue17()], fn instance ->
Sudoku.solve(instance, solution_handler: async_solution_handler())
solutions = flush()
length(solutions) == 1 &&
Sudoku.check_solution(hd(solutions))
end)
end
defp hard() do
"8..........36......7..9.2...5...7.......457.....1...3...1....68..85...1..9....4.."
end
def clue17() do
"......8.16..2........7.5......6...2..1....3...8.......2......7..4..8....5...3...."
end
end
defp async_solution_handler() do
fn solution -> send(self(), solution) end
end
end