Commit graph

507 commits

Author SHA1 Message Date
673d57c02e Remove some unused imports from position::check 2024-02-25 14:12:51 -08:00
5f1fce6cc2 Fix the remaining tests
Well… all the tests except the Peter Ellis Jones tests.

Pass around whole EnPassant types instead of pulling out just the e.p. square.
Make sure that Castling moves have their target and origin squares populated.
Add a color field to the Castle move style to make this possible.
2024-02-25 12:38:55 -08:00
d2fe546824 Remove some unused variables from tests in the king move generator 2024-02-25 10:52:10 -08:00
2a6b098cb8 Fix the pawn unit tests 2024-02-25 10:51:27 -08:00
63c03fb879 Delete the position::r#move module 2024-02-25 09:54:03 -08:00
d77345901c Add chessfriend_moves to the workspace 2024-02-25 09:52:59 -08:00
f1cd36952b Fix build errors in explorer 2024-02-25 09:52:49 -08:00
d668091d0d Replace uses of types in r#move with types from the moves package types 2024-02-25 09:52:40 -08:00
aaad991899 Replace crate::r#move::castle::Castle with moves::Castle 2024-02-25 09:46:59 -08:00
36db46ac18 Move position::tests → testing
Expand information printed in assert_move_list
2024-02-25 09:20:45 -08:00
9b7bf3a212 Implement some helpful testing types and traits in the moves package 2024-02-25 09:15:07 -08:00
d714374f35 Pass self by reference to move builder methods where possible 2024-02-25 08:57:16 -08:00
b5d4069751 Make moves::castle::Parameters public
Rename this struct CastlingParameters → Parameters
Implement getter methods for private properties
2024-02-25 08:51:23 -08:00
b3e55f6dcd Split out some unchecked and check move build() methods
Unchecked are unsafe. Checked are safe.
2024-02-13 11:07:49 -07:00
047eb4fd77 Get en passant move building working (again?) 2024-02-13 11:05:02 -07:00
5d1ad73be6 In Move::capture_square, move the en passant check above the simple capture check 2024-02-13 11:04:21 -07:00
e172bfb5dd Remove the Copy trait from most move Styles and add Clone, Debug, Eq, and PartialEq to Promotion and Castle 2024-02-13 11:03:28 -07:00
f23967f4f3 Rename MoveGenerator::bitboard → _test_bitboard
This method is only used by tests. Mark it with cfg(test) and prefix it with _test
to indicate that fact.
2024-02-11 10:29:09 -07:00
a2865c87b0 Remove an unused Rank import from position.rs 2024-02-11 10:24:11 -07:00
c03a804c79 Rework the Pawn move generator to correctly compute en passant moves 2024-02-11 10:23:07 -07:00
3b8b6b36e3 Implement a basic Display for chessfriend_moves::Move 2024-02-11 10:23:07 -07:00
8724c3cdce Pad out the discriminants of Kind variants 2024-02-11 10:23:07 -07:00
e6a9b7f8c4 Return a chessfriend_moves::EnPassant from a new Position::en_passant()
Replace Position's en_passant_target_square() and en_passant_capture_square()
with a single en_passant() method that returns a new EnPassant struct that has
the target and capture squares for the en passant move.
2024-02-11 10:23:07 -07:00
cc23ee2d90 Rename en passant square method on Position and implement a getter for the capture square
Position::en_passant_square → en_passant_target_square
Position::en_passant_capture_square
2024-02-11 10:23:07 -07:00
c55b7c4877 Implement a whole new move crate 2024-02-11 10:23:07 -07:00
0bedf2aa9f Implement part of a new Builder using the type state pattern
The API for this is much easier to use.
2024-02-11 10:23:07 -07:00
f69c7d4c96 Move a bunch of stuff from the position::move module over to a new chessfriend_moves crate 2024-02-11 10:23:07 -07:00
1958c1a50e [position] Address a few warnings in Position
Build Position::sight_of_piece() and ::is_king_in_check() for cfg(test) only.
Expand the doc comment for ::king_danger() slightly.
Remove an unused Rank import.

# Conflicts:
#	position/src/position/position.rs
2024-02-11 10:22:57 -07:00
e94819c79a Visual Studio Code workspace 2024-02-11 10:22:33 -07:00
41c3a2075c [position] Pass the PlacedPiece in move_set_for_piece() by reference to all the MoveGenerators 2024-02-11 10:17:09 -07:00
29eb56a5d7 [position] Remove some dead code from position::piece_sets 2024-02-11 09:58:18 -07:00
eb192e6dc4 [position] Fix the peterellisjones::en_passant_discovered_check test
This test was asserting that an e.p. move is included in the list of generated
moves. Actually, the position does NOT allow an e.p. move for black.
2024-02-11 09:58:18 -07:00
0201668563 [core] Move the Unicode piece table to a helper to_unicode() method on Piece 2024-02-11 09:58:18 -07:00
742b00119a [bitboard] Implement From<File>, From<Rank> for BitBoard and TryFrom<BitBoard> for Square 2024-02-11 09:58:06 -07:00
997621eea7 [bitboard] Make a few tweaks to some definitions in BitBoard
Use u64::MIN and u64::MAX to define the empty and full bitboards
Write From<Square> as `1u64 << sq as u32`
Write a doc test for BitBoard::is_single_square()
Make library::RANKS and library::FILES pub(crate) instead of pub(super)
2024-02-11 09:58:06 -07:00
891b3ddbb9 [position] Remove the sight data from Position 2024-02-05 14:00:23 -08:00
a5e8f33afe [core] Implement Square::file_rank()
Returns a tuple of the square's file and rank.
2024-02-05 13:59:58 -08:00
a8034c79aa [bitboard] Use a OnceLock to hold the global BitBoard library instance
Thread safe and a single object instead of two!
2024-02-05 13:59:26 -08:00
4b35051deb [position] Derive several traits for CheckingPieces
Clone, Debug, Eq, and PartialEq.
2024-02-04 19:26:41 -08:00
17410936ab [position] Remove the rook_push_mask test from check.rs
This test now lives in move_generator::tests::peterellisjones
2024-02-04 19:26:11 -08:00
f4e57d7d6c [position] Implement all the example positions from Peter Ellis Jones' blog post
https://peterellisjones.com/posts/generating-legal-chess-moves-efficiently/
2024-02-03 15:16:00 -08:00
6c14851806 [position] Move whole-module move_generator tests to a tests/ module 2024-02-03 10:05:11 -08:00
4a601c2b81 [position] Fix all the unit tests
The pawn move generator only generated pushes for white pawns.
The is_king_in_check returned an inverted flag.
MoveSet needed a couple more validation methods: can_move_to_square and can_castle.
The MakeMoveBuilder also needed a little more move validation using the above methods.
2024-02-03 10:04:41 -08:00
63758a2edd Remove the move_generator crate from the Cargo workspace 2024-02-02 08:07:13 -08:00
efcc65d8d6 Merge branch 'checking-pieces-struct' 2024-02-02 08:06:17 -08:00
942c758e15 [position] Calculate legal moves based on whether the king is in check
Use CheckingPieces to determine which and how many pieces check the king.

- If there are no checks, proceed with move generation as normal.
- If there is one checking piece, calculate push and capture masks and use those
   to generate legal moves.
- If there are more than one checking pieces, the only legal moves are king
  moves. Indicate this by setting the push and capture masks to EMPTY.
2024-02-02 08:05:37 -08:00
986758d011 [position] For non-King move generators, only generate moves if the push and captures masks aren't empty
Always generate King moves.
2024-02-02 08:03:51 -08:00
31903cb514 [position] Calculate push and capture masks on CheckingPieces 2024-02-02 07:53:50 -08:00
ac07a8d6cf [position] Implement SliderRayToSquareExt on Shape instead of PlacedPiece
Add an origin square argument to its one method ::ray_to_square(). Pushing this
implementation down a layer means I don't have to care about the color of the
piece.
2024-02-02 07:29:43 -08:00
c8faad799e [position] Clean up Position's construction scheme
Position::default specifies the defaults for all field. Then, ::new() and
::starting() can use ..Default::default() in their implementations to avoid
having to specify empty values for all the internal structures.
2024-02-02 07:28:12 -08:00