def test_get_all_mappings(self):
        R = ['a', 'b', 'c']
        T = ['A', 'B', 'C']
        mappings = list(combinatorics.get_all_mappings(R, T))
        self.assertEqual(len(mappings), 27)

        hashable_mappings = []
        # Are all mappings unique and valid?
        for mapping in mappings:
            hashable_mappings.append(tuple(sorted(mapping.items())))
        self.assertNoDuplicates(hashable_mappings)
Exemple #2
0
 def _get_next_states_when_blocking(self, state):
     # What creatures can block / what creatures are attacking?
     attacking_creature_uids = []
     blocking_creatures_uids = []
     for uid, creature in state.battleground.creatures_with_uids:
         if (creature.controlling_player == state.defending_player and
                 not creature.tapped):
             blocking_creatures_uids.append(uid)
         elif creature.attacking:
             attacking_creature_uids.append(uid)
     # Generate all possible blocking assignments, by adding a "0" uid
     # marking a fake attacker (representing a "no block").
     attacking_creature_uids.append(NO_BLOCK_UID)
     mappings_generator = \
         combinatorics.get_all_mappings(blocking_creatures_uids,
                                        attacking_creature_uids)
     for mapping in mappings_generator:
         # Remove NO_BLOCK_UID from mapping.
         for key in mapping.keys():
             if mapping[key] == NO_BLOCK_UID:
                 del mapping[key]
         next_state = state.copy()
         next_state.declare_blockers(mapping)
         yield next_state