62 lines
No EOL
1.5 KiB
Crystal
62 lines
No EOL
1.5 KiB
Crystal
require "./spec_helper"
|
|
|
|
describe Sudoku::Parser do
|
|
|
|
it "should parse an empty board" do
|
|
board_string = "....\n....\n....\n...."
|
|
board = Sudoku::Parser.parse(board_string, block_size: 2)
|
|
board.size.should eq 4
|
|
board.block_size.should eq 2
|
|
|
|
(0..3).each { |x|
|
|
(0..3).each { |y|
|
|
board.get(x, y).should eq nil
|
|
}
|
|
}
|
|
end
|
|
|
|
it "should raise an exception if number of rows and colums is different" do
|
|
expect_raises(Sudoku::ParseException) do
|
|
Sudoku::Parser.parse("....\n....", block_size: 2)
|
|
end
|
|
end
|
|
|
|
it "should put numbers correctly on the board" do
|
|
board_string = "1...\n.2..\n..3.\n...4"
|
|
board = Sudoku::Parser.parse(board_string, block_size: 2)
|
|
|
|
board.get(0,0).should eq 1
|
|
board.get(1,1).should eq 2
|
|
board.get(2,2).should eq 3
|
|
board.get(3,3).should eq 4
|
|
end
|
|
|
|
it "should raise an exception if a cell contains a character that is not a number or a dot" do
|
|
expect_raises(Sudoku::ParseException) do
|
|
Sudoku::Parser.parse(".A..\n....\n....\n....", block_size: 2)
|
|
end
|
|
end
|
|
|
|
it "should parse 9x9 boards correctly" do
|
|
board_string =
|
|
"8........\n" \
|
|
"..36.....\n" \
|
|
".7..9.2..\n" \
|
|
".5...7...\n" \
|
|
"....457..\n" \
|
|
"...1...3.\n" \
|
|
"..1....68\n" \
|
|
"..85...1.\n" \
|
|
".9....4.."
|
|
|
|
board = Sudoku::Parser.parse(board_string, block_size: 3)
|
|
|
|
board.get(0,0).should eq 8
|
|
board.get(2,1).should eq 3
|
|
board.get(3,1).should eq 6
|
|
board.get(1,2).should eq 7
|
|
board.get(4,2).should eq 9
|
|
board.get(8,8).should eq nil
|
|
end
|
|
|
|
end |