Esempio n. 1
0
TEST_F(HexBoardTest,HexBoardBasicFuncs) {
  //2. test setNodeValue
  //3. test setNumofhexgons
  //4. test resetHexBoard();
  int numofhexgon = 5;
  int numofedges = (numofhexgon * numofhexgon * 2 + 6);

  HexBoard board(numofhexgon);
  HexBoard playersboard;
  playersboard.setNumofhexgons(numofhexgon);

  ASSERT_EQ(board.getSizeOfVertices(), numofhexgon * numofhexgon);
  ASSERT_EQ(board.getSizeOfEdges(), numofedges);
  ASSERT_EQ(playersboard.getSizeOfVertices(), numofhexgon * numofhexgon);
  ASSERT_EQ(playersboard.getSizeOfEdges(), 0);
  int k = 0;
  for (int i = 1; i <= numofhexgon * numofhexgon; ++i) {
    hexgonValKind playerkind;
    if (i % 2 == 0)
      playerkind = hexgonValKind_RED;
      else
      playerkind = hexgonValKind_BLUE;

    ASSERT_EQ(hexgonValKind_EMPTY, board.getNodeValue(i));
    ASSERT_EQ(hexgonValKind_EMPTY, playersboard.getNodeValue(i));
    playersboard.setEdgeValue(i);
    vector<int> neighbors = playersboard.getNeighbors(i);
    if (i % 2 == 0) {
      board.setNodeValue(i, playerkind);
      playersboard.setNodeValue(i, playerkind);
      EXPECT_EQ(playerkind, board.getNodeValue(i));
      EXPECT_EQ(playerkind, playersboard.getNodeValue(i));
    } else {
      board.setNodeValue(i, playerkind);
      EXPECT_EQ(playerkind, board.getNodeValue(i));
      EXPECT_EQ(hexgonValKind_EMPTY, playersboard.getNodeValue(i));
    }
#if __cplusplus > 199711L
    for (auto j : neighbors) {
#else
      for (vector<int>::iterator iter = neighbors.begin(); iter != neighbors.end(); ++iter) {
        int j = *iter;
#endif
      if (playersboard.getNodeValue(j) != playerkind)
        playersboard.deleteEdge(i, j);
    }
    if (i % 6 == 0 || i == 8 || i == 14 || i == 16 || i == 22)
      k++;
    EXPECT_EQ(playersboard.getSizeOfEdges(), k);
  }
  EXPECT_EQ(board.getNumofemptyhexgons(), 0);
  EXPECT_EQ(playersboard.getNumofemptyhexgons(), 13);
  EXPECT_EQ(playersboard.getSizeOfEdges(), 8);
  EXPECT_EQ(board.getSizeOfVertices(), numofhexgon * numofhexgon);
  EXPECT_EQ(playersboard.getSizeOfVertices(), numofhexgon * numofhexgon);
  int connectnode[8] = { 2, 4, 8, 10, 12, 14, 18, 20 };
  for (unsigned i = 0; i < 8; i++){
    EXPECT_FALSE(playersboard.isAdjacent(connectnode[i], (connectnode[i] + 3)));
    EXPECT_TRUE(playersboard.isAdjacent(connectnode[i], (connectnode[i] + 4)));
    EXPECT_FALSE(playersboard.isAdjacent(connectnode[i], (connectnode[i] + 5)));
  }

  board.resetHexBoard(false);
  EXPECT_EQ(board.getSizeOfVertices(), board.getNumofemptyhexgons());
  EXPECT_EQ(board.getSizeOfEdges(), numofedges);
  EXPECT_EQ(8, playersboard.getSizeOfEdges());
  playersboard.resetHexBoard();
  playersboard.setNumofhexgons(numofhexgon);
  EXPECT_EQ(numofhexgon, playersboard.getNumofhexgons());
  EXPECT_EQ(numofhexgon * numofhexgon, playersboard.getSizeOfVertices());
  EXPECT_EQ(playersboard.getSizeOfVertices(),
            playersboard.getNumofemptyhexgons());
  EXPECT_EQ(0, playersboard.getSizeOfEdges());
  for (unsigned i = 0; i < 8; i++){
    EXPECT_FALSE(playersboard.isAdjacent(connectnode[i], (connectnode[i] + 3)));
    EXPECT_FALSE(playersboard.isAdjacent(connectnode[i], (connectnode[i] + 4)));
    EXPECT_FALSE(playersboard.isAdjacent(connectnode[i], (connectnode[i] + 5)));
  }
  for (int i = 1; i <= numofhexgon * numofhexgon; ++i) {
    EXPECT_EQ(hexgonValKind_EMPTY, board.getNodeValue(i));
    EXPECT_EQ(hexgonValKind_EMPTY, playersboard.getNodeValue(i));
  }
  playersboard.resetHexBoard();
  playersboard.setNumofhexgons(3);
  EXPECT_EQ(playersboard.getSizeOfVertices(), 9);

  for (int i = 1; i <= 9; ++i)
    EXPECT_EQ(hexgonValKind_EMPTY, playersboard.getNodeValue(i));
}
TEST_F(HexBoardTest,HexBoardWinningTest) {
  //test 5x5 Hexboard
  HexBoard board(5);
  Game hexboardgame(board);

  Player playera(board, hexgonValKind_RED);
  Player playerb(board, hexgonValKind_BLUE);
  //generate a sequence of paths
  ASSERT_TRUE(hexboardgame.setMove(playera, 1, 1));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playerb, 1, 2));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playera, 2, 1));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playerb, 2, 2));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playera, 3, 1));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playerb, 3, 2));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playera, 4, 1));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playerb, 4, 2));
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  ASSERT_TRUE(hexboardgame.setMove(playera, 5, 1));
  EXPECT_EQ("RED", hexboardgame.getWinner(playera, playerb));
  hexboardgame.resetGame(playera, playerb);
  EXPECT_EQ("UNKNOWN", hexboardgame.getWinner(playera, playerb));
  hexboardgame.showView(playera, playerb);
}