This commit is contained in:
Lukas Wölfer
2019-07-15 02:29:01 +02:00
parent 86b47097fd
commit ff5ea31742
5 changed files with 22 additions and 32 deletions

View File

@@ -1,4 +1,4 @@
from .context import shenzhen_solitaire """Contains an example board to run tests on"""
from shenzhen_solitaire.board import NumberCard, SpecialCard, Board from shenzhen_solitaire.board import NumberCard, SpecialCard, Board
my_board: Board = Board() my_board: Board = Board()

View File

@@ -1,7 +0,0 @@
"""Adjust context to add the project to the search past"""
import os
import sys
sys.path.insert(0, os.path.abspath(
os.path.join(os.path.dirname(__file__), '..')))
import shenzhen_solitaire

View File

@@ -1,40 +1,35 @@
import itertools """Contains function to manually test the visual detection of a board"""
from typing import Tuple, List, Dict
import zipfile
import io
import json
import dataclasses
import numpy as np import numpy as np
import cv2 import cv2
from .context import shenzhen_solitaire
from shenzhen_solitaire.cv import adjustment from shenzhen_solitaire.cv import adjustment
from shenzhen_solitaire.cv import card_finder
from shenzhen_solitaire.cv import board_parser from shenzhen_solitaire.cv import board_parser
from shenzhen_solitaire import board from shenzhen_solitaire import board
from shenzhen_solitaire.cv.configuration import Configuration from shenzhen_solitaire.cv.configuration import Configuration
def generate() -> None: def generate() -> None:
with open("Solitaire.png", 'rb') as fd: """Generate a configuration"""
img_str = fd.read() with open("Solitaire.png", 'rb') as png_file:
img_str = png_file.read()
nparr = np.frombuffer(img_str, np.uint8) nparr = np.frombuffer(img_str, np.uint8)
image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
a = Configuration.generate(image) generated_config = Configuration.generate(image)
a.save('test_config.zip') generated_config.save('test_config.zip')
def parse() -> board.Board: def parse() -> board.Board:
with open("Solitaire2.png", 'rb') as fd: """Parse a configuration"""
img_str = fd.read() with open("Solitaire2.png", 'rb') as png_file:
img_str = png_file.read()
nparr = np.frombuffer(img_str, np.uint8) nparr = np.frombuffer(img_str, np.uint8)
image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
image = cv2.resize(image, (1000, 629)) image = cv2.resize(image, (1000, 629))
a = Configuration.load('test_config.zip') loaded_config = Configuration.load('test_config.zip')
a.field_adjustment = adjustment.adjust_field(image) loaded_config.field_adjustment = adjustment.adjust_field(image)
return board_parser.parse_board(image, a) return board_parser.parse_board(image, loaded_config)
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -1,8 +1,7 @@
"""Contains tests for chain module""" """Contains tests for chain module"""
import unittest import unittest
from .context import shenzhen_solitaire from shenzhen_solitaire.board import NumberCard, Position
from shenzhen_solitaire.board import NumberCard, SpecialCard, Board, Position
from shenzhen_solitaire.board_actions import MoveAction, BunkerizeAction, GoalAction, HuaKillAction from shenzhen_solitaire.board_actions import MoveAction, BunkerizeAction, GoalAction, HuaKillAction
from shenzhen_solitaire import board_possibilities from shenzhen_solitaire import board_possibilities
from .boards import my_board from .boards import my_board

View File

@@ -1,20 +1,23 @@
"""Contains the SolverTest class"""
import unittest import unittest
import copy import copy
from .context import shenzhen_solitaire
from shenzhen_solitaire import solver from shenzhen_solitaire import solver
from .boards import my_board from .boards import my_board
class SolverTest(unittest.TestCase): class SolverTest(unittest.TestCase):
"""Tests the solitaire solver"""
def test_solver(self) -> None: def test_solver(self) -> None:
"""Tests solver"""
board_copy = copy.deepcopy(my_board) board_copy = copy.deepcopy(my_board)
board_id = my_board.state_identifier board_id = my_board.state_identifier
A = solver.solve(my_board) board_solution_iterator = solver.solve(my_board)
for _, B in zip(range(1), A): for _, current_solution in zip(range(1), board_solution_iterator):
self.assertEqual(board_id, board_copy.state_identifier) self.assertEqual(board_id, board_copy.state_identifier)
for x in B: for action in current_solution:
x.apply(board_copy) action.apply(board_copy)
self.assertTrue(board_copy.check_correct()) self.assertTrue(board_copy.check_correct())
self.assertTrue(board_copy.solved()) self.assertTrue(board_copy.solved())