def test_should_activate_strategy(): table = Table() player = table.player strategy = HonitsuStrategy(BaseStrategy.HONITSU, player) table.add_dora_indicator(string_to_136_tile(pin="1")) table.add_dora_indicator(string_to_136_tile(honors="5")) tiles = string_to_136_array(sou="12355", man="12389", honors="123") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False # many tiles in one suit and yakuhai pair, but still many useless winds tiles = string_to_136_array(sou="12355", man="23", pin="68", honors="2355") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False # many tiles in one suit and yakuhai pair and another honor pair, so # now this is honitsu tiles = string_to_136_array(sou="12355", man="238", honors="22355") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is True # same conditions, but ready suit with dora in another suit, so no honitsu tiles = string_to_136_array(sou="12355", pin="234", honors="22355") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False # same conditions, but we have a pon of yakuhai doras, we shouldn't # force honitsu with this hand tiles = string_to_136_array(sou="12355", pin="238", honors="22666") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False # if we have a complete set with dora, we shouldn't go for honitsu tiles = string_to_136_array(sou="11123688", pin="123", honors="55") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False # even if the set may be interpreted as two forms tiles = string_to_136_array(sou="1223688", pin="2334", honors="55") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False # even if the set may be interpreted as two forms v2 tiles = string_to_136_array(sou="1223688", pin="2345", honors="55") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False # if we have a long form with dora, we shouldn't go for honitsu tiles = string_to_136_array(sou="1223688", pin="2333", honors="55") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is False
def test_open_suit_same_shanten(): table = Table() player = table.player player.scores = 25000 table.count_of_remaining_tiles = 100 tiles = string_to_136_array(man="1134556", pin="3", sou="78", honors="777") player.init_hand(tiles) meld = make_meld(MeldPrint.CHI, man="345") player.add_called_meld(meld) strategy = HonitsuStrategy(BaseStrategy.HONITSU, player) assert strategy.should_activate_strategy(player.tiles) is True tile = string_to_136_tile(man="1") meld, _ = player.try_to_call_meld(tile, True) assert meld is not None assert tiles_to_string(meld.tiles) == "111m"
def test_suitable_tiles(): table = Table() player = table.player strategy = HonitsuStrategy(BaseStrategy.HONITSU, player) tiles = string_to_136_array(sou="12355", man="238", honors="23455") player.init_hand(tiles) assert strategy.should_activate_strategy(player.tiles) is True tile = string_to_136_tile(man="1") assert strategy.is_tile_suitable(tile) is False tile = string_to_136_tile(pin="1") assert strategy.is_tile_suitable(tile) is False tile = string_to_136_tile(sou="1") assert strategy.is_tile_suitable(tile) is True tile = string_to_136_tile(honors="1") assert strategy.is_tile_suitable(tile) is True