def test_move_basic(self):
     board_size = (3, 3)
     agent_pos = (1, 1)
     tiles_pos = {'A': (0, 0), 'B': (0, 0), 'C': (0, 0)}
     board = BoardState(agent_pos, tiles_pos, board_size)
     a_pos = tiles_pos['A']
     b_pos = tiles_pos['B']
     c_pos = tiles_pos['C']
     new_board_up = board.move(Action.Up)
     new_board_down = board.move(Action.Down)
     new_board_left = board.move(Action.Left)
     new_board_right = board.move(Action.Right)
     self.assertEqual(new_board_up.agent_pos,
                      (agent_pos[0], agent_pos[1] - 1))
     self.assertEqual(new_board_up.get_tile_pos('A'), a_pos)
     self.assertEqual(new_board_up.get_tile_pos('B'), b_pos)
     self.assertEqual(new_board_up.get_tile_pos('C'), c_pos)
     self.assertEqual(new_board_down.agent_pos,
                      (agent_pos[0], agent_pos[1] + 1))
     self.assertEqual(new_board_down.get_tile_pos('A'), a_pos)
     self.assertEqual(new_board_down.get_tile_pos('B'), b_pos)
     self.assertEqual(new_board_down.get_tile_pos('C'), c_pos)
     self.assertEqual(new_board_left.agent_pos,
                      (agent_pos[0] - 1, agent_pos[1]))
     self.assertEqual(new_board_left.get_tile_pos('A'), a_pos)
     self.assertEqual(new_board_left.get_tile_pos('B'), b_pos)
     self.assertEqual(new_board_left.get_tile_pos('C'), c_pos)
     self.assertEqual(new_board_right.agent_pos,
                      (agent_pos[0] + 1, agent_pos[1]))
     self.assertEqual(new_board_right.get_tile_pos('A'), a_pos)
     self.assertEqual(new_board_right.get_tile_pos('B'), b_pos)
     self.assertEqual(new_board_right.get_tile_pos('C'), c_pos)
 def test_move_invalid(self):
     board_size = (3, 3)
     tiles_pos = {'A': (0, 0), 'B': (0, 0), 'C': (0, 0)}
     agent_pos = (0, 0)
     agent_pos_2 = (2, 2)
     board = BoardState(agent_pos, tiles_pos, board_size)
     board_2 = BoardState(agent_pos_2, tiles_pos, board_size)
     self.assertIsNone(board.move(Action.Up))
     self.assertIsNone(board.move(Action.Left))
     self.assertIsNone(board_2.move(Action.Down))
     self.assertIsNone(board_2.move(Action.Right))
 def test_expand_generate_only_available_moves(self):
     board = BoardState((2, 1), {
         'A': (0, 0),
         'B': (0, 2),
         'C': (2, 2)
     }, (3, 3))
     node = Node(board, 0, 0, Action.Unknown)
     tree_search = AbstractTreeSearch(board, board)
     successors = tree_search.expand(node)
     self.assertTrue(len(successors) == 3)
     child_up = Node(board.move(Action.Up), 1, 1, Action.Up)
     child_down = Node(board.move(Action.Down), 1, 1, Action.Down)
     child_left = Node(board.move(Action.Left), 1, 1, Action.Left)
     self.assertTrue(child_up in successors)
     self.assertTrue(child_down in successors)
     self.assertTrue(child_left in successors)
 def test_move_to_tile(self):
     """
     - - A
     - B ☺
     - - C
     """
     board_size = (3, 3)
     tiles_pos = {'A': (2, 0), 'B': (1, 1), 'C': (2, 2)}
     agent_pos = (2, 1)
     a_pos = tiles_pos['A']
     b_pos = tiles_pos['B']
     c_pos = tiles_pos['C']
     board = BoardState(agent_pos, tiles_pos, board_size)
     new_board_1 = board.move(Action.Up)  # Move onto A
     new_board_2 = board.move(Action.Left)  # Move onto B
     new_board_3 = board.move(Action.Down)  # Move onto C
     self.assertEqual(new_board_1.agent_pos, a_pos)
     self.assertEqual(new_board_1.get_tile_pos('A'), agent_pos)
     self.assertEqual(new_board_2.agent_pos, b_pos)
     self.assertEqual(new_board_2.get_tile_pos('B'), agent_pos)
     self.assertEqual(new_board_3.agent_pos, c_pos)
     self.assertEqual(new_board_3.get_tile_pos('C'), agent_pos)