Example #1
0
    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))
Example #2
0
    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))
Example #3
0
    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)))
Example #4
0
    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))
Example #5
0
    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))
Example #6
0
    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))
Example #7
0
    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))
Example #8
0
    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))
Example #9
0
    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],
        )
Example #10
0
    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))
Example #11
0
    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)
Example #12
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))
Example #13
0
 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])
Example #14
0
    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)