1 #include "../../src/moves.h"
2 #include "../../src/board.h"
3 #include "../../src/position.h"
4 #include "gtest/gtest.h"
6 TEST(MoveListTest
, Size
)
8 int list_size
= (MAX_PLY
* MAX_BF
) * sizeof(ExtendedMove
);
9 int size
= list_size
+ sizeof(unsigned int);
11 // MoveList's internal array's size should not be a power of two
12 //EXPECT_NE(0, list_size & (list_size - 1));
14 EXPECT_EQ(128 * 256 * 4, list_size
);
15 EXPECT_EQ(list_size
+ 4, size
);
16 EXPECT_EQ(size
, sizeof(MoveList
));
19 TEST(MoveListTest
, Constructor
)
22 for (int i
= 0; i
< MAX_PLY
; ++i
) {
23 for (int j
= 0; j
< MAX_BF
; ++j
) {
25 EXPECT_TRUE(moves
[j
].is_null());
28 EXPECT_EQ(0, moves
[j
].value());
34 TEST(MoveListTest
, Assignement
)
38 for (int i
= 0; i
< MAX_PLY
; ++i
) {
39 for (int j
= 0; j
< MAX_BF
; ++j
) {
40 ExtendedMove
em1(m
, i
+ j
);
42 EXPECT_EQ(em1
, moves
[j
]);
43 EXPECT_EQ(em1
.value(), moves
[j
].value());
47 for (int i
= MAX_PLY
- 1; i
> 0; --i
) {
49 for (int j
= 0; j
< MAX_BF
; ++j
) {
50 ExtendedMove
em1(m
, i
+ j
);
51 EXPECT_EQ(em1
, moves
[j
]);
52 EXPECT_EQ(em1
.value(), moves
[j
].value());
56 for (int i
= 0; i
< MAX_PLY
; ++i
) {
57 for (int j
= 0; j
< MAX_BF
; ++j
) {
58 ExtendedMove
em1(m
, i
+ j
);
59 EXPECT_EQ(em1
, moves
[j
]);
60 EXPECT_EQ(em1
.value(), moves
[j
].value());
70 MOVES_STATE_SIZE
* sizeof(unsigned char) + // 5 bytes
71 3 + // 3 bytes (padding)
72 sizeof(MoveList
*) + // 4 bytes
73 sizeof(Position
*) + // 4 bytes
74 sizeof(Board
*) + // 4 bytes
75 sizeof(Pieces
*) + // 4 bytes
76 2 * sizeof(unsigned char) + // 2 bytes
77 sizeof(MovesState
) + // 1 byte
78 sizeof(bool); // 1 byte
80 EXPECT_EQ(size
, sizeof(Moves
));
83 TEST(MovesTest
, Constructor
)
91 ExtendedMove
em(m
, 50);
93 EXPECT_EQ(em
.value(), list
[0].value());
95 Moves
moves(board
, pieces
, position
, list
);
97 EXPECT_EQ(BEST
, moves
.state());
99 // Test if MoveList::inc_ply() has been implicitly called by Moves()
100 for (int i
= 0; i
< MAX_PLY
; ++i
) {
101 EXPECT_EQ(0, list
[i
].value());
104 EXPECT_EQ(em
.value(), list
[0].value());