Skip to content

Commit

Permalink
omitted piece letter implies a pawn move. closes #15
Browse files Browse the repository at this point in the history
  • Loading branch information
iigorr committed Jul 28, 2015
1 parent 2b0efa9 commit 10ebdda
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
5 changes: 3 additions & 2 deletions src/pgn.Parse/MoveParsers.fs
Expand Up @@ -46,8 +46,9 @@ let pTarget =

// origin squalre of move (usually for disambiguation)
let pOrigin =
opt pPiece .>>. opt pFile .>>. opt pRank
|>> fun ((piece, file), rank) -> MoveInfo(piece, file, rank)
attempt(pPiece .>>. opt pFile .>>. opt pRank)
<|> (pFile .>>. opt pRank |>> fun(f, r) -> ((PieceType.Pawn , Some f),r))
|>> fun ((piece, file), rank) -> MoveInfo(Some piece, file, rank)
<!> "pOrigin"

let pBasicMove =
Expand Down
20 changes: 11 additions & 9 deletions test/pgn.Parse.Test/MoveParsersTest.fs
Expand Up @@ -47,26 +47,27 @@ type MoveParserTest() =
Assert.AreEqual(File.D, moveInfo.File)
Assert.AreEqual(None, moveInfo.Rank)

[<TestMethod>]
member this.pOrigin_should_yield_a_MoveInfo_object_by_rank() =
let moveInfo = parse pOrigin "N5"
Assert.AreEqual(PieceType.Knight, moveInfo.Piece)
Assert.AreEqual(null, moveInfo.File)
Assert.AreEqual(5, moveInfo.Rank)

[<TestMethod>]
member this.pOrigin_should_yield_a_MoveInfo_object_on_file_rank() =
let moveInfo = parse pOrigin "d5"
Assert.AreEqual(null, moveInfo.Piece)
Assert.AreEqual(PieceType.Pawn, moveInfo.Piece)
Assert.AreEqual(File.D, moveInfo.File)
Assert.AreEqual(5, moveInfo.Rank)

[<TestMethod>]
member this.pOrigin_should_yield_a_MoveInfo_object_on_file_only() =
let moveInfo = parse pOrigin "d"
Assert.AreEqual(null, moveInfo.Piece)
Assert.AreEqual(PieceType.Pawn, moveInfo.Piece)
Assert.AreEqual(File.D, moveInfo.File)
Assert.AreEqual(null, moveInfo.Rank)

[<TestMethod>]
member this.pOrigin_should_yield_a_MoveInfo_object_on_rank_only() =
let moveInfo = parse pOrigin "5"
Assert.AreEqual(null, moveInfo.Piece)
Assert.AreEqual(null, moveInfo.File)
Assert.AreEqual(5, moveInfo.Rank)

[<TestMethod>]
member this.pCapturingMove_should_accept_a_standard_capturing_move() =
Expand Down Expand Up @@ -144,7 +145,7 @@ type MoveParserTest() =
[<TestMethod>]
member this.pCapturing_move_should_parse_move_correctly_with_originSquare() =
let move = parse pCapturingMove "a1xBh8"
Assert.AreEqual(None, move.Piece)
Assert.AreEqual(PieceType.Pawn, move.Piece)
Assert.AreEqual(MoveType.Capture, move.Type)
Assert.AreEqual(PieceType.Bishop, move.TargetPiece)
Assert.AreEqual(Square(File.A, 1), move.OriginSquare)
Expand Down Expand Up @@ -299,6 +300,7 @@ type MoveParserTest() =
member this.pMove_should_correctly_parse_capturing_move_with_origin_file_and_no_target_piece() =
let move = parse pMove "bxc6"
Assert.AreEqual(MoveType.Capture, move.Type);
Assert.AreEqual(PieceType.Pawn, move.Piece);
Assert.AreEqual(Square(File.C, 6), move.TargetSquare);
Assert.AreEqual(File.B, move.OriginFile);

Expand Down

0 comments on commit 10ebdda

Please sign in to comment.