def test_legal_moves(self): cases = [ BoardState([0, 0, 1, 0, 2, 2, 1, 1, 2]), BoardState([1, 2, 1, 2, 0, 0, 0, 0, 0]) ] expected_results = [[0, 1, 3], [4, 5, 6, 7, 8]] for a_case, expectation in zip(cases, expected_results): self.assertEqual(expectation, a_case.legal_moves())
def test_stalemate(self): stalemates = [ BoardState([1, 2, 1, 1, 2, 1, 2, 1, 2]), BoardState([1, 1, 2, 2, 2, 1, 1, 2, 1]) ] for a_stalemate in stalemates: self.assertTrue(a_stalemate.full) self.assertEqual((False, False), a_stalemate.player_victory)
def test_rank_properties(self): ranks = [] ranks.append(BoardState([1, 0, 0, 0, 0, 0, 0, 0, 0])) ranks.append(BoardState([1, 2, 0, 0, 0, 0, 0, 0, 0])) ranks.append(BoardState([1, 2, 1, 0, 0, 0, 0, 0, 0])) ranks.append(BoardState([1, 2, 1, 2, 0, 0, 0, 0, 0])) ranks.append(BoardState([1, 2, 1, 2, 0, 0, 1, 0, 0])) ranks.append(BoardState([1, 2, 1, 2, 0, 0, 1, 0, 2])) ranks.append(BoardState([1, 2, 1, 2, 0, 1, 1, 0, 2])) ranks.append(BoardState([1, 2, 1, 2, 2, 1, 1, 0, 2])) ranks.append(BoardState([1, 2, 1, 2, 2, 1, 1, 2, 2])) self.assertEqual(1, ranks[0].rank) self.assertEqual(2, ranks[1].rank) self.assertEqual(3, ranks[2].rank) self.assertEqual(4, ranks[3].rank) self.assertEqual(5, ranks[4].rank) self.assertEqual(6, ranks[5].rank) self.assertEqual(7, ranks[6].rank) self.assertEqual(8, ranks[7].rank) self.assertEqual(9, ranks[8].rank) for uut_idx in range(len(ranks)): uut = ranks[uut_idx] oppos = [] oppos.extend(ranks) del oppos[uut_idx] for an_oppo in oppos: self.assertNotEqual(uut, an_oppo)
def test_domain_addr_consistency(self): rank_2_0 = BoardState([1, 0, 0, 2, 0, 0, 0, 0, 0]) rank_2_0_alt = BoardState([0, 0, 0, 0, 0, 0, 1, 2, 0]) rank_2_1 = BoardState([1, 0, 0, 0, 2, 0, 0, 0, 0]) rank_3_0 = BoardState([1, 2, 1, 0, 0, 0, 0, 0, 0]) uut = BoardStateDomain() self.assertEqual((2, 0), uut.state_to_rank_idx_pair(rank_2_0)) self.assertEqual((2, 1), uut.state_to_rank_idx_pair(rank_2_1)) self.assertEqual((3, 0), uut.state_to_rank_idx_pair(rank_3_0)) self.assertEqual((2, 0), uut.state_to_rank_idx_pair(rank_2_0_alt)) self.assertEqual(rank_2_0, uut.rank_idx_pair_to_state((2, 0))) self.assertEqual(rank_2_0_alt, uut.rank_idx_pair_to_state((2, 0))) self.assertEqual(rank_2_1, uut.rank_idx_pair_to_state((2, 1))) self.assertEqual(rank_3_0, uut.rank_idx_pair_to_state((3, 0)))
def test_alternate_equality(self): # 1 0 0 # 2 0 0 # 0 0 0 baseline_state = BoardState([1, 0, 0, 2, 0, 0, 0, 0, 0]) alt_states = [] # 0 0 0 # 0 0 0 # 1 2 0 alt_states.append(BoardState([0, 0, 0, 0, 0, 0, 1, 2, 0])) # 0 0 0 # 0 0 2 # 0 0 1 alt_states.append(BoardState([0, 0, 0, 0, 0, 2, 0, 0, 1])) # 0 2 1 # 0 0 0 # 0 0 0 alt_states.append(BoardState([0, 2, 1, 0, 0, 0, 0, 0, 0])) # 0 0 1 # 0 0 2 # 0 0 0 alt_states.append(BoardState([0, 0, 1, 0, 0, 2, 0, 0, 0])) # 0 0 0 # 2 0 0 # 1 0 0 alt_states.append(BoardState([0, 0, 0, 2, 0, 0, 1, 0, 0])) # 0 0 0 # 0 0 0 # 0 2 1 alt_states.append(BoardState([0, 0, 0, 0, 0, 0, 0, 2, 1])) # 1 2 0 # 0 0 0 # 0 0 0 alt_states.append(BoardState([1, 2, 0, 0, 0, 0, 0, 0, 0])) for an_alt in alt_states: self.assertEqual(baseline_state, an_alt)
def test_victory(self): p1_victories = [ BoardState([1, 1, 1, 2, 2, 1, 2, 1, 0]), # Across BoardState([2, 2, 1, 1, 1, 1, 2, 1, 0]), # Across BoardState([2, 1, 2, 2, 1, 0, 1, 1, 1]), # Across BoardState([1, 0, 2, 1, 2, 0, 1, 0, 0]), # Down BoardState([2, 1, 2, 0, 1, 0, 0, 1, 0]), # Down BoardState([0, 0, 1, 0, 2, 1, 2, 0, 1]), # Down BoardState([1, 0, 2, 0, 1, 2, 0, 0, 1]), # Diag high-low BoardState([2, 0, 1, 2, 1, 0, 1, 0, 0]), # Diag low-high ] p2_victories = [ BoardState([2, 2, 2, 1, 1, 2, 1, 2, 0]), # Across BoardState([1, 1, 2, 2, 2, 2, 1, 2, 0]), # Across BoardState([1, 2, 1, 1, 2, 0, 2, 2, 2]), # Across BoardState([2, 0, 1, 2, 1, 0, 2, 0, 0]), # Down BoardState([1, 2, 1, 0, 2, 0, 0, 2, 0]), # Down BoardState([0, 0, 2, 0, 1, 2, 1, 0, 2]), # Down BoardState([2, 0, 1, 0, 2, 1, 0, 0, 2]), # Diag high-low BoardState([1, 0, 2, 1, 2, 0, 2, 0, 0]), # Diag low-high ] for a_p1_vic in p1_victories: self.assertEqual((True, False), a_p1_vic.player_victory) for a_p2_vic in p2_victories: self.assertEqual((False, True), a_p2_vic.player_victory)
def test_basic_equality(self): first_state = BoardState([1, 0, 0, 2, 0, 0, 0, 0, 0]) second_state = BoardState([1, 0, 0, 2, 0, 0, 0, 0, 0]) self.assertEqual(first_state, second_state)
def test_basic_inequality(self): baseline_state = BoardState([1, 0, 0, 2, 0, 0, 0, 0, 0]) other_state = BoardState([1, 0, 0, 0, 2, 0, 0, 0, 0]) self.assertNotEqual(baseline_state, other_state)
def test_discovery_from_empty(self): uut = BoardStateDomain() new_state = BoardState([1, 0, 0, 0, 0, 0, 0, 0, 0]) (rank, idx) = uut.state_to_rank_idx_pair(new_state) self.assertEqual(1, rank) self.assertEqual(0, idx)