def test_observe(self):
        world = WorldWatten()
        world.first_card_deck = 32
        world.last_card_deck = 32
        world.player_A_hand = [0, 1, 2, 3, 4]
        world.player_B_hand = [31, 30, 29, 28, 27]
        world.rank = 8
        world.suit = 0
        world.played_cards = [10, 11, 12, 13, 14]
        world.current_game_player_A_score = 1
        world.current_game_player_B_score = 2
        world.player_A_score = 14
        world.player_B_score = 1
        world.is_last_move_raise = True
        world.is_last_move_accepted_raise = True
        world.is_last_hand_raise_valid = False
        world.current_game_prize = 15

        expected_player_A = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 9
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 19
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 29
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 39
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 49
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 59
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,  # 69
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 79
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 89
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 99
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            0,  # 109
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 119
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,  # 129
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 139
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 149
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            1,  # 159
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 169
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,  # 179
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 189
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            0,
            0,
            0,  # 199
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 209
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 219
            0,
            0,
            0,
            0,
            0,
            1
        ]  # 225

        expected_player_B = [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 9
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 19
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 29
            0,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 39
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 49
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 59
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,
            0,  # 69
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 79
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 89
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            1,
            0,
            0,  # 99
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            0,  # 109
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 119
            0,
            0,
            0,
            0,
            0,
            0,
            1,
            0,
            0,
            0,  # 129
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 139
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 149
            0,
            0,
            0,
            0,
            0,
            1,
            1,
            1,
            1,
            1,  # 159
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 169
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,  # 179
            1,
            0,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 189
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 199
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            1,  # 209
            1,
            1,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,  # 219
            0,
            0,
            0,
            0,
            0,
            1
        ]  # 225

        observation_player_A = world.observe(1)
        observation_player_B = world.observe(-1)
        np.testing.assert_array_equal(
            observation_player_A,
            np.array(expected_player_A).reshape((226, 1)))
        np.testing.assert_array_equal(
            observation_player_B,
            np.array(expected_player_B).reshape((226, 1)))
    def test_game_no_raise_player_A_starts(self):
        world = WorldWatten()
        world.LOG.setLevel(DEBUG)

        world.init_world_to_state(1, -1, 0, 0, [14, 30, 2, 28, 11],
                                  [4, 23, 31, 7, 22], [], 0, 0, 2, False,
                                  False, None, 21, 26, None, None)

        # [40, 45, 29, 12, 28, 13, 26, 0, 33, 45,
        #  3, 25, 6, 16, 30, 14, 13, 1, 38, 43, 13, 5, 32, 3, 21, 27, 33, 42, 0,
        #  4, 30, 31, 23, 7, 29, 1, 25, 9, 33, 42, 9, 30, 14, 32, 7, 25, 34, 42,
        #  29, 7, 15, 19, 11, 17, 20, 27, 0, 2, 35, 44, 31, 4, 28, 1, 12, 3, 33,
        #  45, 24, 25, 7, 11, 14, 18, 37, 45, 2, 27, 3, 0, 8, 10, 6, 26, 33, 43,
        #  21, 22, 6, 10, 24, 14, 8, 16, 33, 42, 3, 0, 29, 17, 13, 31]
        world_copy = world.deepcopy()

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [33, 34, 35, 36, 37, 38, 39, 40, 41, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(36)
        self.assertEqual(outcome, "continue")
        self.assertEqual(next_player, -1)

        world_copy.rank = 3
        world_copy.current_player = -1
        self._compare_worlds(world, world_copy)

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [42, 43, 44, 45, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(45)
        self.assertEqual(outcome, "continue")
        self.assertEqual(next_player, 1)

        world_copy.suit = 3
        world_copy.current_player = 1
        self._compare_worlds(world, world_copy)

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [14, 30, 2, 28, 11, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(30)
        self.assertEqual(outcome, "continue")
        self.assertEqual(next_player, -1)

        world_copy.player_A_hand = [14, 2, 28, 11]
        world_copy.played_cards = [30]
        world_copy.current_player = -1
        self._compare_worlds(world, world_copy)

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [31, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(31)
        self.assertEqual(outcome, "continue")
        self.assertEqual(next_player, -1)

        world_copy.current_game_player_B_score = 1
        world_copy.player_B_hand = [4, 23, 7, 22]
        world_copy.played_cards = [30, 31]
        self._compare_worlds(world, world_copy)

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [4, 23, 7, 22, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(22)
        self.assertEqual(outcome, "continue")
        self.assertEqual(next_player, 1)

        world_copy.player_B_hand = [4, 23, 7]
        world_copy.played_cards = [30, 31, 22]
        world_copy.current_player = 1
        self._compare_worlds(world, world_copy)

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [14, 2, 28, 11, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(2)
        self.assertEqual(outcome, "continue")
        self.assertEqual(next_player, -1)

        world_copy.player_A_hand = [14, 28, 11]
        world_copy.current_game_player_B_score = 2
        world_copy.played_cards = [30, 31, 22, 2]
        world_copy.current_player = -1
        self._compare_worlds(world, world_copy)

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [4, 23, 7, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(23)
        self.assertEqual(outcome, "continue")
        self.assertEqual(next_player, 1)

        world_copy.player_B_hand = [4, 7]
        world_copy.played_cards = [30, 31, 22, 2, 23]
        world_copy.current_player = 1
        self._compare_worlds(world, world_copy)

        ######## MOVE ########
        valid_moves = world.get_valid_moves()
        self.assertEqual(valid_moves, [14, 28, 11, 46])
        self._compare_worlds(world, world_copy)

        outcome, next_player = world.act(14)
        self.assertEqual(outcome, "end")
        self.assertEqual(next_player, -1)

        world.player_A_hand = [20, 21, 22, 23, 24]
        world.player_B_hand = [25, 26, 27, 28, 29]
        world.first_card_deck = 4
        world.last_card_deck = 5
        world.deck = [8, 9, 10]

        world_copy.player_A_hand = [20, 21, 22, 23, 24]
        world_copy.player_B_hand = [25, 26, 27, 28, 29]
        world_copy.first_card_deck = 4
        world_copy.last_card_deck = 5
        world_copy.deck = [8, 9, 10]
        world_copy.current_player = -1
        world_copy.distributing_cards_player = 1
        world_copy.player_B_score = 2
        world_copy.played_cards = []
        world_copy.current_game_player_A_score = 0
        world_copy.current_game_player_B_score = 0
        world_copy.rank = None
        world_copy.suit = None
        self._compare_worlds(world, world_copy)