def test_tiles_getter(self): tiles_in_huro = [ Tile(Suit.MANZU.value, 7), Tile(Suit.MANZU.value, 8), Tile(Suit.MANZU.value, 9) ] self.assertEqual(self.huro_chii.tiles, tiles_in_huro)
def test_remains_are_sets(self): self.player_1.hand[Tile(Suit.MANZU.value, 3).index] += 1 self.player_1.hand[Tile(Suit.SOUZU.value, 5).index] -= 2 remain_tiles = self.player_1.hand huro_count = len(self.player_1.kabe) self.assertEqual(check_remains_are_sets(remain_tiles, huro_count), True)
def test_nagashi_mangan(self): self.player_1.furiten_tiles_idx.add(Tile(Suit.MANZU.value, 1).index) self.player_1.furiten_tiles_idx.add(Tile(Suit.SOUZU.value, 9).index) self.player_1.furiten_tiles_idx.add( Tile(Suit.JIHAI.value, Jihai.CHUN.value).index) winner = self.kyoku.check_nagashi_mangan() self.assertEqual(winner, self.player_1)
def test_is_chi(self): tile_set = [ Tile(Suit.SOUZU.value, 3), Tile(Suit.SOUZU.value, 4), Tile(Suit.SOUZU.value, 5) ] self.assertEqual(is_chi(tile_set), True)
def test_tiles_setter(self): new_tiles_in_huro = [ Tile(Suit.MANZU.value, 5), Tile(Suit.MANZU.value, 6), Tile(Suit.MANZU.value, 7) ] self.huro_chii.tiles = new_tiles_in_huro self.assertEqual(self.huro_chii.tiles, new_tiles_in_huro)
def setUp(self): # tenpai: 3 MANZU 5 SOUZU self.player = Player('test', 1) for i in range(1, 10): self.player.hand[Tile(Suit.PINZU.value, i).index] += 1 self.player.hand[Tile(Suit.MANZU.value, 3).index] += 2 self.player.hand[Tile(Suit.SOUZU.value, 5).index] += 2 self.stack = Stack()
def test_ron(self): discard_1 = Tile(Suit.MANZU.value, 3) discard_2 = Tile(Suit.SOUZU.value, 5) ron_1 = check_ron(self.player, discard_1, self.stack, self.bakaze) ron_2 = check_ron(self.player, discard_2, self.stack, self.bakaze) self.assertEqual(ron_1, True) self.assertEqual(ron_2, True)
def test_chii(self): self.player_1.action_with_naki = MagicMock(return_value=None) self.player_1.discard_after_naki = MagicMock(return_value=Tile(0, 1)) state, discard_tile, discard_pos, act = self.turn.naki_flow( self.player_1, Naki.CHII) self.assertEqual(state, 0) self.assertEqual(discard_tile, Tile(0, 1)) self.assertEqual(discard_pos, 0)
def test_not_pon(self): tile_set = [ Tile(Suit.SOUZU.value, 3), Tile(Suit.SOUZU.value, 4), Tile(Suit.SOUZU.value, 5) ] self.assertEqual(is_pon(tile_set), False) tile_set.pop() self.assertEqual(is_pon(tile_set), False)
def test_no_suukaikan(self): self.tile_stack.add_dora_indicator() naki_tile = Tile(Suit.SOUZU.value, 5) naki_tile.owner = self.player_1.seating_position kan = Huro(Naki.ANKAN, naki_tile, [Tile(Suit.SOUZU.value, 5) for i in range(4)]) kabe = [kan] self.turn.check_suukaikan(kabe) self.assertEqual(self.turn.suukaikan, False)
def test_suufon_renda_counter_example(self): tile_ton = Tile(Suit.JIHAI.value, Jihai.TON.value) tile_nan = Tile(Suit.JIHAI.value, Jihai.NAN.value) self.player_1.add_kawa(tile_nan) self.player_2.add_kawa(tile_ton) self.player_3.add_kawa(tile_ton) self.player_4.add_kawa(tile_ton) self.assertEqual(self.turn.check_suufon_renda(), False)
def test_tsumo(self): discard_1 = Tile(Suit.MANZU.value, 3) discard_2 = Tile(Suit.SOUZU.value, 5) check_tsumo_1 = check_tsumo(self.player, discard_1, self.stack, self.bakaze) check_tsumo_2 = check_tsumo(self.player, discard_2, self.stack, self.bakaze) self.assertEqual(check_tsumo_1, True) self.assertEqual(check_tsumo_2, True)
def test_daminkan(self): discarded_tile = Tile(Suit.JIHAI.value, Jihai.SHAA.value) self.assertEqual(check_daminkan(self.player.hand, discarded_tile), [ [ discarded_tile, Tile(Suit.JIHAI.value, Jihai.SHAA.value), Tile(Suit.JIHAI.value, Jihai.SHAA.value), Tile(Suit.JIHAI.value, Jihai.SHAA.value) ], ])
def test_ankan_2(self): kan_in_hand = Tile(Suit.JIHAI.value, Jihai.TON.value) self.player.hand[kan_in_hand.index] += 4 new_tile = Tile(Suit.JIHAI.value, Jihai.SHAA.value) ankan_list = sorted( [[kan_in_hand, kan_in_hand, kan_in_hand, kan_in_hand], [new_tile, new_tile, new_tile, new_tile]]) self.assertEqual(check_ankan(self.player.hand, new_tile), ankan_list)
def test_call_naki(self): self.turn.ensemble_actions = MagicMock(return_value=(2, (Action.NAKI, Naki.CHII))) self.turn.naki_flow = MagicMock(return_value=(0, Tile(0, 1), 2, Action.NAKI)) state, discard_tile, discard_pos, act = self.turn.discard_flow( Tile(1, 1), self.player_1.seating_position) self.assertEqual(state, 0) self.assertEqual(discard_tile, Tile(0, 1)) self.assertEqual(discard_pos, 2)
def test_daminkan(self): self.player_1.action_with_naki = MagicMock(return_value=None) self.turn.draw_flow = MagicMock(return_value=(0, Tile(0, 1), 0, Action.NAKI)) state, discard_tile, discard_pos, act = self.turn.naki_flow( self.player_1, Naki.DAMINKAN) self.assertEqual(state, 0) self.assertEqual(discard_tile, Tile(0, 1)) self.assertEqual(discard_pos, 0) self.assertEqual(len(self.tile_stack.doras), 2)
def test_all_noact(self): self.turn.ensemble_actions = MagicMock(return_value=(2, (Action.NOACT, Naki.NONE))) self.turn.draw_flow = MagicMock(return_value=(0, Tile(0, 1), 0, Action.NOACT)) state, discard_tile, discard_pos, act = self.turn.discard_flow( Tile(0, 2), self.player_1.seating_position) self.assertEqual(state, 0) self.assertEqual(discard_tile, Tile(0, 1)) self.assertEqual(discard_pos, 0)
def test_chakan_2(self): tile_in_hand = Tile(Suit.MANZU.value, 7) self.player.hand[tile_in_hand.index] += 1 new_tile = Tile(Suit.PINZU.value, 5) chakan_list = sorted( [[new_tile, new_tile, new_tile, new_tile], [tile_in_hand, tile_in_hand, tile_in_hand, tile_in_hand]]) self.assertEqual( check_chakan(self.player.hand, self.player.kabe, new_tile), chakan_list)
def test_chii_3(self): discard = Tile(Suit.MANZU.value, 7) possible_sets = [[ Tile(Suit.MANZU.value, 5), Tile(Suit.MANZU.value, 6), Tile(Suit.MANZU.value, 7) ]] chii_sets = check_chii(self.player.hand, discard) chii_sets = [sorted(chii_set) for chii_set in chii_sets] self.assertEqual(chii_sets, possible_sets)
def test_no_ron(self): discard_1 = Tile(Suit.MANZU.value, 4) ron_1 = check_ron(self.player, discard_1, self.stack, self.bakaze) self.assertEqual(ron_1, False) # 振聴 discard_2 = Tile(Suit.MANZU.value, 3) self.player.add_kawa(Tile(Suit.MANZU.value, 3)) ron_2 = check_ron(self.player, discard_2, self.stack, self.bakaze) self.assertEqual(ron_2, False)
def test_suukantsu_other_player(self): for _ in range(3): self.tile_stack.add_dora_indicator() naki_tile = Tile(Suit.SOUZU.value, 5) naki_tile.owner = self.player_1.seating_position kan = Huro(Naki.DAMINKAN, naki_tile, [Tile(Suit.SOUZU.value, 5) for i in range(4)]) kabe = [kan] self.turn.check_suukaikan(kabe) self.assertEqual(len(self.tile_stack.doras), 5) self.assertEqual(self.turn.suukaikan, True)
def setUp(self): self.player = Player('test', 0) self.player.hand[Tile(Suit.JIHAI.value, Jihai.HATSU.value).index] += 2 self.player.hand[Tile(Suit.JIHAI.value, Jihai.HAKU.value).index] += 2 self.player.hand[Tile(Suit.JIHAI.value, Jihai.CHUN.value).index] += 1 self.player.hand[Tile(Suit.JIHAI.value, Jihai.NAN.value).index] += 1 self.player.hand[Tile(Suit.PINZU.value, 1).index] += 1 self.player.hand[Tile(Suit.PINZU.value, 9).index] += 1 self.player.hand[Tile(Suit.SOUZU.value, 1).index] += 1 self.player.hand[Tile(Suit.SOUZU.value, 9).index] += 1 self.player.hand[Tile(Suit.SOUZU.value, 3).index] += 1 self.player.hand[Tile(Suit.SOUZU.value, 4).index] += 2
def test_suukaikan(self): for _ in range(3): self.tile_stack.add_dora_indicator() self.player_1.action_with_naki = MagicMock(return_value=None) self.turn.draw_flow = MagicMock(return_value=(0, Tile(0, 1), 0, Action.NOACT)) state, discard_tile, pos, act = self.turn.naki_flow( self.player_1, Naki.DAMINKAN) self.assertEqual(state, 0) self.assertEqual(discard_tile, Tile(0, 1)) self.assertEqual(self.turn.suukaikan, True) self.assertEqual(len(self.tile_stack.doras), 5)
def test_tenpai_7(self): self.player.hand[Tile(Suit.MANZU.value, 1).index] += 4 self.player.hand[Tile(Suit.MANZU.value, 2).index] += 1 self.player.hand[Tile(Suit.MANZU.value, 3).index] += 1 self.player.hand[Tile(Suit.MANZU.value, 4).index] += 4 naki_tile = Tile(Suit.JIHAI.value, Jihai.SHAA.value) naki_tile.owner = 0 self.player.kabe.append( Huro(Naki.PON, naki_tile, [Tile(Suit.JIHAI.value, Jihai.SHAA.value) for i in range(3)])) tenpai = [Tile(Suit.MANZU.value, 1), Tile(Suit.MANZU.value, 4)] # tenpai: 1 MANZU 4 MANZU 空聴(カラテン) self.assert_tenpai(self.player, tenpai)
def setUp(self): self.player = Player('test', 0) self.player.hand[Tile(Suit.SOUZU.value, 2).index] += 2 self.player.hand[Tile(Suit.SOUZU.value, 3).index] += 1 self.player.hand[Tile(Suit.SOUZU.value, 4).index] += 1 self.player.hand[Tile(Suit.SOUZU.value, 5).index] += 1 self.player.hand[Tile(Suit.MANZU.value, 8).index] += 3 self.player.hand[Tile(Suit.JIHAI.value, Jihai.NAN.value).index] += 3 naki_tile = Tile(Suit.SOUZU.value, 5) naki_tile.owner = 0 self.player.kabe.append( Huro(Naki.PON, naki_tile, [Tile(Suit.SOUZU.value, 5) for i in range(3)]))
def test_tenpai_8(self): self.player.hand[Tile(Suit.MANZU.value, 1).index] += 2 self.player.hand[Tile(Suit.MANZU.value, 2).index] += 2 self.player.hand[Tile(Suit.MANZU.value, 3).index] += 2 self.player.hand[Tile(Suit.MANZU.value, 4).index] += 2 self.player.hand[Tile(Suit.MANZU.value, 5).index] += 2 self.player.hand[Tile(Suit.MANZU.value, 6).index] += 2 self.player.hand[Tile(Suit.MANZU.value, 7).index] += 1 tenpai = [ Tile(Suit.MANZU.value, 1), Tile(Suit.MANZU.value, 4), Tile(Suit.MANZU.value, 7) ] self.assert_tenpai(self.player, tenpai)
def test_normal_ryuukyoku(self): self.tile_stack.playing_wall = self.tile_stack.playing_wall[-1:] self.player_1.action_with_new_tile = MagicMock( return_value=((Action.NOACT, Naki.NONE), Tile(0, 1))) _, action_tile, discard_pos, _ = self.turn.draw_flow(self.player_1) self.assertEqual(self.turn.discard_flow(action_tile, discard_pos), (-1, action_tile, discard_pos, Action.NOACT))
def test_no_nagashi_mangan_2(self): self.player_1.furiten_tiles_idx.add(Tile(Suit.MANZU.value, 1).index) self.player_1.furiten_tiles_idx.add(Tile(Suit.MANZU.value, 9).index) naki_tile = Tile(Suit.JIHAI.value, Jihai.HAKU.value) naki_tile.owner = self.player_1.seating_position huro = Huro(Naki.CHII, naki_tile, []) self.player_2.kabe = [huro] self.player_2.furiten_tiles_idx.add(Tile(Suit.MANZU.value, 5).index) self.player_3.furiten_tiles_idx.add(Tile(Suit.MANZU.value, 5).index) self.player_3.furiten_tiles_idx.add(Tile(Suit.MANZU.value, 5).index) self.player_4.furiten_tiles_idx.add(Tile(Suit.MANZU.value, 5).index) winner = self.kyoku.check_nagashi_mangan() self.assertEqual(winner, None)
def test_ron(self): self.turn.ensemble_actions = MagicMock(return_value=(2, (Action.RON, Naki.NONE))) state, discard_tile, discard_pos, act = self.turn.discard_flow( Tile(1, 1), self.player_1.seating_position) self.assertEqual(state, 1) self.assertEqual(discard_tile, None) self.assertEqual(discard_pos, 0)
def test_suufon_renda(self): tile_ton = Tile(Suit.JIHAI.value, Jihai.TON.value) self.player_1.add_kawa(tile_ton) self.player_2.add_kawa(tile_ton) self.player_3.add_kawa(tile_ton) self.player_4.add_kawa(tile_ton) self.assertEqual(self.turn.check_suufon_renda(), True)