summaryrefslogtreecommitdiff
path: root/src/miinaharava/tests/test_bot.py
blob: 435151f8e64bcab627e3af707694a55ced712df4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
""" tests/test_bot.py - Testaa botin toimintaa"""
# pylint: disable = missing-class-docstring, too-few-public-methods, protected-access

import unittest

from board import Board, Tile
from bots import DSSPBot, SimpleBot
from tui import Action

class TestBotClass(unittest.TestCase):
    """ botin testit"""
    def test_init(self):
        """ olioden luominen onnistuu """
        DSSPBot()
        SimpleBot()

    def correctly_marking(self, open_free=False, bot_type=DSSPBot):
        """ Testaa onko miinat miinoja ja vapaat vapaita alkuun avatusta """
        for _ in range(500):
            brd = Board()
            # jos ei aukea ylälaidasta otetaan seuraava
            if not brd.guess(0,0):
                continue
            # vain varmat liikut
            bot = bot_type(uncertain=False)

            tested = set()
            while True:
                action, x, y = bot.hint(brd.get_view())
                if (x,y) in tested:
                    break
                tested.add((x,y))
                if action == Action.SAFE:
                    self.assertTrue( brd._Board__tiles[x][y] < Tile.MINE )
                    if open_free:
                        brd.guess(x,y)
                if action == Action.MINE:
                    self.assertTrue( brd._Board__tiles[x][y] == Tile.MINE )

    def test_dssp_marks_correctly_with_open(self):
        """ Testaa onko dssp:n miinat miinoja ja avaa vapaat """
        self.correctly_marking(True, DSSPBot)

    def test_simple_marks_correctly_with_open(self):
        """ Testaa onko dssp:n miinat miinoja ja avaa vapaat """
        self.correctly_marking(True, SimpleBot)

    def test_dssp_marks_correctly(self):
        """ Testaa onko dssp:n miinat miinoja ja vapaat vapaita """
        self.correctly_marking(False, DSSPBot)

    def test_simple_marks_correctly(self):
        """ Testaa onko simple:n miinat miinoja ja vapaat vapaita """
        self.correctly_marking(False, SimpleBot)