#include "gmock/gmock.h"
#include <vector>
-TEST(Adjacency, Adjacency) {
+using testing::Field;
+using testing::ElementsAreArray;
+
+TEST(Step, Adjacency) {
const signed char LEFT = -1;
const signed char RIGHT = +1;
const signed char UP = -BOARD_DIM;
}
std::vector<signed char> actual;
- for (int j = 0; adjacent[i][j] >= 0; j++) {
- actual.push_back(adjacent[i][j]);
+ for (int j = 0; Step::adjacent[i][j] >= 0; j++) {
+ actual.push_back(Step::adjacent[i][j]);
}
EXPECT_THAT(actual, testing::UnorderedElementsAreArray(expected));
}
is >> b;
EXPECT_FALSE(is.fail());
EXPECT_TRUE(is.eof());
- EXPECT_THAT(b.board, testing::ElementsAreArray({15,14,9,13,3,1,12,8,0,11,6,4,7,5,2,10}));
+ EXPECT_THAT(b.board, ElementsAreArray({15,14,9,13,3,1,12,8,0,11,6,4,7,5,2,10}));
}
TEST(Board, ShortInput) {
Board b2{{0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}};
EXPECT_EQ(64, b1.distance(b2));
}
+
+TEST(Step, TwoSuccessors) {
+ auto s = std::shared_ptr<Step>(new Step{{{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}}, nullptr});
+ std::vector<Step*> suc = s->successors(s);
+ EXPECT_THAT(suc, testing::UnorderedElementsAre(
+ Field(&Step::board, Field(&Board::board, ElementsAreArray({1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,15}))),
+ Field(&Step::board, Field(&Board::board, ElementsAreArray({1,2,3,4,5,6,7,8,9,10,11,0,13,14,15,12})))));
+}
+
+TEST(Step, FourSuccessors) {
+ auto s = std::shared_ptr<Step>(new Step{{{1,2,3,4,5,0,6,7,8,9,10,11,12,13,14,15}}, nullptr});
+ std::vector<Step*> suc = s->successors(s);
+ EXPECT_THAT(suc, testing::UnorderedElementsAre(
+ Field(&Step::board, Field(&Board::board, ElementsAreArray({1,2,3,4,0,5,6,7,8,9,10,11,12,13,14,15}))),
+ Field(&Step::board, Field(&Board::board, ElementsAreArray({1,2,3,4,5,6,0,7,8,9,10,11,12,13,14,15}))),
+ Field(&Step::board, Field(&Board::board, ElementsAreArray({1,0,3,4,5,2,6,7,8,9,10,11,12,13,14,15}))),
+ Field(&Step::board, Field(&Board::board, ElementsAreArray({1,2,3,4,5,9,6,7,8,0,10,11,12,13,14,15})))));
+}