summaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/bitboard.c2
-rw-r--r--src/engine/fen.c31
-rw-r--r--src/engine/fen.h5
-rw-r--r--src/engine/ints.h1
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;