def test_is_same_suit(self): tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 39, 39, 39, 39, 40, 40, 41, 41]) self.assertTrue(is_same_suit(tiles)) tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 71, 71, 73, 73, 97, 97, 98, 98]) self.assertFalse(is_same_suit(tiles))
def test_is_7_pairs(self): tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 71, 71, 73, 73, 97, 97, 98, 98]) self.assertTrue(is_7_pairs(tiles)) tiles = Tile.from_masks( [33, 33, 34, 34, 35, 35, 36, 36, 38, 39, 65, 65, 65, 65]) self.assertFalse(is_7_pairs(tiles))
def test_get_combinations(self): tiles = Tile.from_masks([33, 34, 35, 38, 38, 38, 71, 71]) self.assertListEqual( list(combinations(tiles)), list(self.mahjong_manager.get_combinations(tiles))) tiles = Tile.from_masks([33, 34, 35, 36, 38, 38, 38]) self.assertListEqual( list(combinations(tiles, 1)), list(self.mahjong_manager.get_combinations(tiles, 1)))
def test_get_candidates_with_joker(self): mm = self.mahjong_manager mm._use_joker_api() mm.jokers = {Tile(1, 5)} tiles = Tile.from_masks([33, 37, 37, 38, 38, 71, 71]) self.assertListEqual(list(mm.get_candidates(tiles)), Tile.from_masks([33, 34, 35, 38, 71])) tiles = Tile.from_masks( [33, 33, 37, 37, 37, 37, 38, 38, 71, 71, 72, 72, 73]) self.assertListEqual(sorted(mm.get_candidates(tiles)), sorted(mm.deck.tile_set))
def test_has_candidates(self): manager = self.mahjong_manager tiles = Tile.from_masks([33, 34, 35, 36, 38, 38, 38]) self.assertTrue(manager.has_candidates(tiles)) tiles = Tile.from_masks([33, 34, 35, 38, 38, 38]) self.assertFalse(manager.has_candidates(tiles)) tiles = Tile.from_masks( [33, 33, 34, 34, 36, 36, 65, 65, 67, 67, 99, 103, 103]) manager.has_pairs_patterns = True self.assertTrue(manager.has_candidates(tiles))
def test_check_win(self): mm = self.mahjong_manager tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 39, 39, 70, 71, 71, 72, 72, 73]) self.assertTrue(mm.check_win(tiles)) tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 39, 39, 70, 71, 71, 72, 72, 73, 73]) self.assertFalse(mm.check_win(tiles)) tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 39, 39, 70, 71, 71, 72, 72]) self.assertFalse(mm.check_win(tiles))
def test_is_7_pairs_with_joker(self): tiles = Tile.from_masks( [33, 33, 34, 34, 35, 35, 36, 36, 38, 39, 65, 65, 65, 65]) for joker, count in ((Tile.from_mask(65), 4), (Tile.from_mask(38), 1), (Tile.from_mask(39), 1), (Tile.from_mask(34), 2)): self.assertTrue( is_7_pairs_with_joker( [tile for tile in tiles if tile is not joker], count)) tiles = Tile.from_masks( [33, 33, 34, 34, 35, 35, 36, 36, 37, 38, 39, 65, 65, 65]) self.assertTrue( is_7_pairs_with_joker( [tile for tile in tiles if tile is not Tile.from_mask(65)], 3))
def test_has_candidates_with_joker(self): mm = self.mahjong_manager mm._use_joker_api() mm.jokers = {Tile(1, 5)} tiles = Tile.from_masks([33, 37, 37, 38, 38, 71, 71]) self.assertTrue(mm.has_candidates(tiles)) tiles = Tile.from_masks( [33, 33, 37, 37, 37, 37, 38, 38, 71, 71, 72, 72, 73]) self.assertTrue(mm.has_candidates(tiles)) tiles = Tile.from_masks( [33, 33, 34, 34, 36, 36, 37, 65, 65, 67, 99, 103, 103]) mm.has_pairs_patterns = True self.assertTrue(mm.has_candidates(tiles))
def test_get_candidates(self): manager = self.mahjong_manager tiles = Tile.from_masks([33, 34, 35, 36, 38, 38, 38]) self.assertEqual(list(manager.get_candidates(tiles)), Tile.from_masks([33, 36, 37])) tiles = Tile.from_masks( [33, 33, 33, 34, 35, 36, 37, 38, 39, 40, 41, 41, 41]) self.assertEqual(list(manager.get_candidates(tiles)), Tile.from_masks(range(33, 42))) tiles = Tile.from_masks([33, 34, 35, 38, 38, 38]) self.assertEqual(list(manager.get_candidates(tiles)), []) # pairs manager.has_pairs_patterns = True tiles = Tile.from_masks( [33, 33, 34, 34, 35, 35, 36, 36, 66, 66, 68, 68, 99]) self.assertEqual(list(manager.get_candidates(tiles)), [Tile.from_mask(99)]) tiles = Tile.from_masks( [66, 66, 67, 67, 68, 68, 69, 70, 70, 71, 71, 73, 73]) self.assertEqual( sorted(manager.get_candidates(tiles)), [Tile.from_mask(69), Tile.from_mask(72)]) manager._use_joker_api() manager.jokers = {Tile(1, 5)} tiles = Tile.from_masks( [33, 33, 34, 34, 35, 35, 37, 37, 66, 66, 68, 68, 99]) self.assertEqual(sorted(manager.get_candidates(tiles)), sorted(manager.deck.tile_set)) manager.jokers = {Tile.DRAGON_RED} tiles = Tile.from_masks( [36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 65, 65]) self.assertEqual( sorted(manager.get_candidates(tiles)), [Tile.CHARACTER_FOUR, Tile.CHARACTER_SEVEN], )
def test_check_win_with_joker(self): mm = self.mahjong_manager mm._use_joker_api() joker = Tile.from_mask(37) tiles = Tile.from_masks([33, 34, 37, 37, 38, 38, 71, 71]) mm.jokers = set([joker]) self.assertTrue(mm.check_win(tiles)) joker = Tile.from_mask(141) tiles = Tile.from_masks([36, 38, 39, 40, 41, 68, 141, 141]) mm.jokers = set([joker]) self.assertTrue(mm.check_win(tiles)) joker = Tile.from_mask(99) mm.jokers = set([joker]) tiles = Tile.from_masks([36, 38, 40, 41, 68, 99, 99, 99]) self.assertTrue(mm.check_win(tiles)) tiles = Tile.from_masks([39, 40, 41, 138, 139, 99, 99, 99]) self.assertTrue(mm.check_win(tiles)) tiles = Tile.from_masks([34, 35, 35, 36, 36, 36, 37, 37, 38, 138, 99]) self.assertTrue(mm.check_win(tiles)) tiles = Tile.from_masks([34, 34, 36, 37, 38, 138, 99, 99]) self.assertTrue(mm.check_win(tiles)) joker = Tile.from_mask(67) mm.jokers = set([joker]) tiles = Tile.from_masks( [35, 36, 37, 67, 68, 68, 69, 70, 71, 102, 102, 103, 104, 105]) self.assertTrue(mm.check_win(tiles)) tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 39, 39, 70, 71, 71, 72, 72, 73, 73]) self.assertFalse(mm.check_win(tiles)) tiles = Tile.from_masks( [33, 33, 37, 37, 38, 38, 39, 39, 70, 71, 71, 72, 72]) self.assertFalse(mm.check_win(tiles))
def test_get_lack_of_joker(self): tiles = Tile.from_masks([33, 34, 35, 36, 38, 38, 38]) self.assertEqual(get_lack_of_joker(tiles), 2) tiles = Tile.from_masks([33, 36, 38, 38, 38]) self.assertEqual(get_lack_of_joker(tiles), 4) tiles = Tile.from_masks([33, 33, 33, 36, 38, 39]) self.assertEqual(get_lack_of_joker(tiles), 3) tiles = Tile.from_masks([33, 33, 33, 138, 138]) self.assertEqual(get_lack_of_joker(tiles), 1) tiles = Tile.from_masks([33, 33, 33]) self.assertEqual(get_lack_of_joker(tiles), 0) tiles = Tile.from_masks([]) self.assertEqual(get_lack_of_joker(tiles), 0)
def test_has_free_joker(self): mm = self.mahjong_manager mm._use_joker_api() joker = Tile.from_mask(37) mm.jokers = set([joker]) tiles = Tile.from_masks([33, 34, 35, 38, 38, 71, 71]) self.assertFalse(mm.has_free_joker(tiles)) tiles = Tile.from_masks([33, 34, 35, 37, 71, 71, 71]) self.assertTrue(mm.has_free_joker(tiles)) tiles = Tile.from_masks([33, 34, 37, 37, 71, 71, 71]) self.assertTrue(mm.has_free_joker(tiles)) tiles = Tile.from_masks([33, 34, 37, 38, 71, 71, 71]) self.assertFalse(mm.has_free_joker(tiles)) tiles = Tile.from_masks([37, 37, 71, 71, 71, 97, 98]) self.assertTrue(mm.has_free_joker(tiles)) tiles = Tile.from_masks([37, 37, 37, 71, 71, 97, 103]) self.assertFalse(mm.has_free_joker(tiles))
def test_tile_masks(self): tile = Tile(Tile.SUIT_BAMBOO, Tile.RANK_ONE) tile2 = Tile(Tile.SUIT_BAMBOO, Tile.RANK_TWO) self.assertListEqual(Tile.from_masks([97, 98]), [tile, tile2])
def test_combinations(self): tiles = Tile.from_masks([33, 34, 35, 38, 38, 38, 71, 71]) self.assertListEqual(list(combinations(tiles)), [{ 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([33, 34, 35])], 'eye': Tile.from_masks([71, 71]), 'joker_count': 0, }]) tiles = Tile.from_masks([33, 34, 35, 38, 38, 38, 71]) self.assertListEqual(list(combinations(tiles)), []) tiles = Tile.from_masks([33, 34, 35, 36, 38, 38, 38]) self.assertListEqual(list(combinations( tiles, 1)), [{ 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([34, 35, 36])], 'eye': Tile.from_masks([33]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([33, 34, 35])], 'eye': Tile.from_masks([36]), 'joker_count': 0, }, { 'triplets': [], 'sequences': [Tile.from_masks([33, 34, 35]), Tile.from_masks([36, 38])], 'eye': Tile.from_masks([38, 38]), 'joker_count': 0, }]) tiles = Tile.from_masks([33, 34, 35, 38, 38, 38]) self.assertListEqual(list(combinations(tiles, 1)), []) tiles = Tile.from_masks([33, 34, 35, 38, 38, 38]) self.assertListEqual(list(combinations(tiles, 2)), [ { 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([34, 35])], 'eye': Tile.from_masks([33]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([33, 35])], 'eye': Tile.from_masks([34]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([33, 34])], 'eye': Tile.from_masks([35]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([38, 38])], 'sequences': [Tile.from_masks([33, 34, 35])], 'eye': Tile.from_masks([38]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([38])], 'sequences': [Tile.from_masks([33, 34, 35])], 'eye': Tile.from_masks([38, 38]), 'joker_count': 0, }, { 'triplets': [], 'sequences': [Tile.from_masks([33, 34, 35]), Tile.from_masks([38])], 'eye': Tile.from_masks([38, 38]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([33, 34, 35])], 'eye': [], 'joker_count': 0, }, ]) tiles = Tile.from_masks([33, 33, 33, 38, 38, 38]) self.assertListEqual(list(combinations(tiles, 2)), [ { 'triplets': [Tile.from_masks([33, 33]), Tile.from_masks([38, 38, 38])], 'sequences': [], 'eye': Tile.from_masks([33]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([33]), Tile.from_masks([38, 38, 38])], 'sequences': [], 'eye': Tile.from_masks([33, 33]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([38, 38, 38])], 'sequences': [Tile.from_masks([33])], 'eye': Tile.from_masks([33, 33]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([33, 33, 33]), Tile.from_masks([38, 38])], 'sequences': [], 'eye': Tile.from_masks([38]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([33, 33, 33]), Tile.from_masks([38])], 'sequences': [], 'eye': Tile.from_masks([38, 38]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([33, 33, 33])], 'sequences': [Tile.from_masks([38])], 'eye': Tile.from_masks([38, 38]), 'joker_count': 0, }, { 'triplets': [Tile.from_masks([33, 33, 33]), Tile.from_masks([38, 38, 38])], 'sequences': [], 'eye': [], 'joker_count': 0, }, ]) self.assertListEqual(list(combinations([], 2)), [{ 'triplets': [], 'sequences': [], 'eye': [], 'joker_count': 0 }]) tiles = Tile.from_masks([33, 33, 34, 34, 35, 35, 36, 36, 37, 37]) self.assertEqual(len(list(combinations(tiles, 4))), 359)