Пример #1
0
    def test_neighbor_flags(self):
        state = GameState(Field((4, 4), {(0, 0)}))
        for cell in ((0, 0), (2, 0), (1, 2)):
            state.set_flag(cell)

        for (cell, ans) in (((0, 0), 0), ((1, 1), 3), ((1, 0), 2)):
            self.assertEqual(ans, state.neighbor_flags(cell))
Пример #2
0
    def test_handler_remove(self):
        state = GameState(Field.generate((2, 2), 2))

        callargs = []
        handler = lambda *args: callargs.append(args)

        state.add_cell_handler(handler)
        state.set_flag((0, 0))
        self.assertEqual(1, len(callargs))

        state.remove_cell_handler(handler)
        state.set_flag((1, 1))
        self.assertEqual(1, len(callargs))
Пример #3
0
    def test_handler_flag(self):
        state = GameState(Field.generate((5, 5), 8))
        callargs = []
        state.add_cell_handler(lambda *args: callargs.append(args))

        state.set_flag((2, 4))
        self.assertEqual(1, len(callargs))
        self.assertEqual(((2, 4), CellState.FLAG), callargs[-1])

        state.set_flag((2, 4))
        self.assertEqual(1, len(callargs))

        state.unset_flag((2, 4))
        self.assertEqual(2, len(callargs))
        self.assertEqual(((2, 4), CellState.UNKNOWN), callargs[-1])
Пример #4
0
 def test_save_and_load(self):
     field = Field((4, 4), {(0, 2), (3, 1), (1, 1), (2, 3), (0, 1), (1, 0)})
     state = GameState(field)
     state.open_cell((0, 0))
     for cell in ((1, 0), (0, 1), (1, 1)):
         state.set_flag(cell)
     self.assertEqual(state, GameState.fromstr(str(state), field))
Пример #5
0
    def test_handler_open(self):
        state = GameState(Field((3, 3), {(1, 0)}))
        callargs = []
        state.add_cell_handler(lambda *args: callargs.append(args))

        state.open_cell((0, 0))
        self.assertEqual(1, len(callargs))
        self.assertEqual(((0, 0), CellState.OPENED), callargs[-1])

        state.open_cell((2, 2))
        self.assertEqual(7, len(callargs))
        self.assertSetEqual(
            {((x, y), CellState.OPENED) for x in (0, 1, 2) for y in (1, 2)},
            set(callargs[1:]))
Пример #6
0
 def test_init_state(self):
     field = Field((2, 2), {(0, 0), (1, 1)})
     state = GameState(field)
     self.assertEqual(0, state.flags())
     self.assertEqual(4, state.unmarked_cells())
     for cell in ((0, 0), (1, 0), (0, 1), (1, 1)):
         self.assertEqual(CellState.UNKNOWN, state.get_state(cell))
     self.assertFalse(state.check_win())
Пример #7
0
    def test_handler_load(self):
        field = Field((3, 3), {(1, 0)})
        state = GameState(field)
        state.set_flag((0, 0))
        state.open_cell((2, 2))

        callargs = []
        loaded = GameState.fromstr(str(state), field,
                                   lambda *args: callargs.append(args))

        self.assertEqual(7, len(callargs))
        self.assertSetEqual(
            {((x, y), CellState.OPENED) for x in (0, 1, 2) for y in (1, 2)} |
            {((0, 0), CellState.FLAG)},
            set(callargs))
Пример #8
0
    def test_clone(self):
        calls = 0

        def handler(*args):
            nonlocal calls
            calls += 1

        state = GameState(Field.generate((10, 15), 21))
        state.add_cell_handler(handler)

        state2 = copy.copy(state)
        self.assertEqual(state, state2)
        state2.set_flag((0, 0))
        self.assertNotEqual(state, state2)
        self.assertEqual(1, calls)
        state2.remove_cell_handler(handler)
        state2.set_flag((1, 0))
        self.assertEqual(1, calls)
        state.set_flag((5, 0))
        self.assertEqual(2, calls)
Пример #9
0
    def test_win(self):
        state = GameState(Field((4, 3), {(0, 0), (2, 0)}))
        self.assertFalse(state.check_win())

        state.set_flag((0, 0))
        state.set_flag((2, 0))
        self.assertFalse(state.check_win())
        state.unset_flag((0, 0))
        state.unset_flag((2, 0))

        state.open_cell((2, 2))
        self.assertFalse(state.check_win())

        state.set_flag((0, 0))
        state.open_cell((1, 0))
        state.open_cell((3, 0))
        self.assertFalse(state.check_win())

        state.set_flag((2, 0))
        self.assertTrue(state.check_win())
Пример #10
0
    def test_open_cell(self):
        field = Field((4, 3), {(0, 0), (2, 0)})

        state1 = GameState(field)

        self.assertTrue(state1.open_cell((10, 10)))
        self.assertEqual(GameState(field), state1)

        self.assertTrue(state1.open_cell((3, 2)))
        self.assertEqual(4, state1.unmarked_cells())
        self.assertSetEqual(
            {state1.get_state((x, y)) for x in (0, 1, 2, 3) for y in (1, 2)},
            {CellState.OPENED})

        self.assertFalse(state1.open_cell((0, 0)))
        self.assertEqual(4, state1.unmarked_cells())

        state2 = GameState(field)
        state2.set_flag((2, 2))
        self.assertTrue(state2.open_cell((3, 2)))
        self.assertEqual(8, state2.unmarked_cells())
        self.assertSetEqual(
            {state2.get_state((x, y)) for x in (2, 3) for y in (1, 2)},
            {CellState.OPENED, CellState.FLAG})

        self.assertTrue(state2.open_cell((2, 2)))
        self.assertEqual(8, state2.unmarked_cells())
Пример #11
0
 def test_handler_bad(self):
     state = GameState(Field.generate((2, 2), 1))
     with self.assertRaises(TypeError):
         state.add_cell_handler([])
Пример #12
0
    def test_flags(self):
        def check_state(state, flags, unmarked, cells=()):
            self.assertEqual(flags, state.flags())
            self.assertEqual(unmarked, state.unmarked_cells())
            for cell in cells:
                self.assertEqual(cell[1], state.get_state(cell[0]))

        state = GameState(Field((5, 4), {(1, 0), (1, 2), (3, 2)}))
        check_state(state, 0, 20, [((2, 2), CellState.UNKNOWN)])

        self.assertFalse(state.unset_flag((2, 2)))
        check_state(state, 0, 20, [((2, 2), CellState.UNKNOWN)])

        self.assertTrue(state.set_flag((2, 2)))
        check_state(state, 1, 19, [((2, 2), CellState.FLAG)])
        self.assertFalse(state.set_flag((2, 2)))
        check_state(state, 1, 19, [((2, 2), CellState.FLAG)])

        self.assertTrue(state.unset_flag((2, 2)))
        check_state(state, 0, 20, [((2, 2), CellState.UNKNOWN)])

        self.assertFalse(state.set_flag((10, 10)))
        check_state(state, 0, 20)

        self.assertFalse(state.unset_flag((10, 10)))
        check_state(state, 0, 20)

        state.open_cell((4, 0))
        check_state(state, 0, 14)
        self.assertFalse(state.set_flag((4, 1)))
        check_state(state, 0, 14)
Пример #13
0
 def test_init_bad(self):
     with self.assertRaises(TypeError):
         GameState([])
Пример #14
0
    def test_eq_operator(self):
        field = Field((3, 3), {(0, 1), (1, 0), (1, 1)})
        state0 = GameState(field)
        state1 = GameState(field)
        self.assertEqual(state0, state1)

        state0.set_flag((1, 1))
        self.assertNotEqual(state0, state1)
        state0.unset_flag((1, 1))
        self.assertEqual(state0, state1)

        state2 = GameState(field)
        state2.open_cell((0, 0))
        self.assertNotEqual(state1, state2)

        state3 = GameState(field)
        state3.open_cell((2, 2))
        self.assertNotEqual(state1, state3)

        self.assertNotEqual(state0, [])
        self.assertNotEqual(GameState(Field.generate((2, 2), 1)),
                            GameState(Field.generate((2, 2), 2)))
Пример #15
0
 def test_load_bad(self):
     with self.assertRaises(ValueError):
         GameState.fromstr('1,1,0:2;0,0:1', Field((3, 3), {}))
Пример #16
0
 def test_str(self):
     field = Field((4, 4), {(0, 0), (3, 3)})
     state = GameState(field)
     self.assertEqual(state, GameState.fromstr(str(state), field))