diff options
| author | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-31 15:05:42 +0530 |
|---|---|---|
| committer | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-31 15:05:42 +0530 |
| commit | 1043870b3efb37179c71e0b21c7faf9179e641c1 (patch) | |
| tree | d7485ccc38beb5edc3178bf9447b9c4b32ed6b9d /src/engine | |
| parent | d786ac8fc49391e4efc69891b135979aa2848701 (diff) | |
communicating fens from frontends & fixing load_fen
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/bitboard.c | 2 | ||||
| -rw-r--r-- | src/engine/fen.c | 31 | ||||
| -rw-r--r-- | src/engine/fen.h | 5 | ||||
| -rw-r--r-- | src/engine/ints.h | 1 |
4 files changed, 37 insertions, 2 deletions
diff --git a/src/engine/bitboard.c b/src/engine/bitboard.c index 6e4f1b6..80cdb78 100644 --- a/src/engine/bitboard.c +++ b/src/engine/bitboard.c @@ -24,6 +24,8 @@ position_t position_starting() { BLACK_SHORT_CASTLE | BLACK_LONG_CASTLE, .turn = WHITE_TURN, .passantable_file = 0, + .halfmove_clock = 0, + .fullmove_clock = 1 }; } diff --git a/src/engine/fen.c b/src/engine/fen.c index a375b30..aa258c9 100644 --- a/src/engine/fen.c +++ b/src/engine/fen.c @@ -1,6 +1,5 @@ #include <assert.h> #include <stdbool.h> -#include <stdio.h> #include "fen.h" #include "bitboard.h" @@ -98,7 +97,7 @@ struct fen_load load_fen(const char* fen) { int piece_type = get_piece_enum_item(c); if (piece_type == -1) return (struct fen_load) { true, position }; - position.bitboards[piece_type] |= (bitboard_t)1 << square; + position.bitboards[piece_type] |= (bitboard_t)1 << square++; } c = fen[++i]; @@ -167,4 +166,32 @@ bool test_fen_passant() { if (p.passantable_file != 6) return false; return true; } + +bool test_starting_position() { + struct fen_load r = load_fen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"); + if (r.failed) return false; + + position_t position = r.position; + position_t expected = position_starting(); + + if (position.castling != expected.castling) return false; + if (position.passantable_file != expected.passantable_file) return false; + if (position.turn != expected.turn) return false; + if (position.fullmove_clock != expected.fullmove_clock) return false; + if (position.halfmove_clock != expected.halfmove_clock) return false; + if (position.bitboards[0] != expected.bitboards[0]) return false; + if (position.bitboards[1] != expected.bitboards[1]) return false; + if (position.bitboards[2] != expected.bitboards[2]) return false; + if (position.bitboards[3] != expected.bitboards[3]) return false; + if (position.bitboards[4] != expected.bitboards[4]) return false; + if (position.bitboards[5] != expected.bitboards[5]) return false; + if (position.bitboards[6] != expected.bitboards[6]) return false; + if (position.bitboards[7] != expected.bitboards[7]) return false; + if (position.bitboards[8] != expected.bitboards[8]) return false; + if (position.bitboards[9] != expected.bitboards[9]) return false; + if (position.bitboards[10] != expected.bitboards[10]) return false; + if (position.bitboards[11] != expected.bitboards[11]) return false; + + return true; +} #endif diff --git a/src/engine/fen.h b/src/engine/fen.h index 3e5cecf..d45240e 100644 --- a/src/engine/fen.h +++ b/src/engine/fen.h @@ -1,3 +1,6 @@ +#ifndef FEN_H +#define FEN_H + #include "bitboard.h" struct fen_load { @@ -5,3 +8,5 @@ struct fen_load { position_t position; }; struct fen_load load_fen(const char* fen); + +#endif // FEN_H diff --git a/src/engine/ints.h b/src/engine/ints.h index b134fe6..4a0cfe3 100644 --- a/src/engine/ints.h +++ b/src/engine/ints.h @@ -2,6 +2,7 @@ #define INTS_H #include <stdint.h> +#include <inttypes.h> typedef uint8_t u8; typedef uint16_t u16; |
