Files @ 18d23ce9a53f
Branch filter:

Location: OneEye/src/tests/testEngine.py

Laman
settings:
setting and getting parameters
entering setup state
closing on setRecording
import os.path
import logging as log
from unittest import TestCase

import config as cfg
from util import BLACK as B,WHITE as W,EMPTY as _
from go.engine import SpecGo,Engine
from statebag import BoardState
from .util import simpleLoadSgf,listStates


_log=log.getLogger(__name__)
_log.setLevel(log.INFO)
_log.propagate=False
formatter=log.Formatter("%(asctime)s %(levelname)s: %(message)s",datefmt="%Y-%m-%d %H:%M:%S")
handler=log.FileHandler("/tmp/oneeye.log",mode="w")
handler.setFormatter(formatter)
_log.addHandler(handler)


class TestTransitions(TestCase):
	def testBasic(self):
		s1=BoardState([
			[_,_,_],
			[_,_,_],
			[_,_,_]
		])
		s2=BoardState([
			[_,_,_],
			[_,B,_],
			[_,_,_]
		])
		g=SpecGo(3)
		eng=Engine(g)
		eng.load(s1)
		eng._moveList=eng._g.listRelevantMoves(s2-s1)
		self.assertEqual(eng._dfs(s2,1),[(1,1,1)])

	def testCapture(self):
		s1=BoardState([
			[_,W,_],
			[W,B,_],
			[_,W,_]
		])
		s2=BoardState([
			[_,W,_],
			[W,_,W],
			[_,W,_]
		])
		g=SpecGo(3)
		g.toMove=W
		eng=Engine(g)
		eng.load(s1)
		eng._moveList=eng._g.listRelevantMoves(s2-s1)
		self.assertEqual(eng._dfs(s2,1),[(W,1,2)])

	def testMulti(self):
		s1=BoardState([
			[_,_,_],
			[_,_,_],
			[_,_,_]
		])
		s2=BoardState([
			[_,_,_],
			[_,B,W],
			[_,_,_]
		])
		g=SpecGo(3)
		eng=Engine(g)
		eng.load(s1)
		eng._moveList=eng._g.listRelevantMoves(s2-s1)
		self.assertEqual(eng._dfs(s2,2),[(W,1,2),(B,1,1)])

	def testSnapback(self):
		s1=BoardState([
			[B,B,B],
			[B,_,B],
			[B,W,B]
		])
		s2=BoardState([
			[_,_,_],
			[_,_,_],
			[_,W,_]
		])
		g=SpecGo(3)
		eng=Engine(g)
		eng.load(s1)
		eng._moveList=eng._g.listRelevantMoves(s2-s1)
		self.assertEqual(eng._dfs(s2,2),[(W,2,1),(B,1,1)])

		s1=BoardState([
			[_,_,_],
			[W,B,B],
			[_,W,W]
		])
		s2=BoardState([
			[_,_,_],
			[W,B,B],
			[_,W,_]
		])
		eng.load(s1)
		eng._moveList=eng._g.listRelevantMoves(s2-s1)
		self.assertEqual(eng._dfs(s2,2),[(W,2,1),(B,2,0)])

	def testReal(self):
		files=["O-Takao-20110106.sgf","Sakai-Iyama-20110110.sgf"]
		eng=Engine()

		for f in files:
			moves=simpleLoadSgf(os.path.join(cfg.srcDir,"tests/data",f))
			states=listStates(moves)

			for k in range(1,4):
				toMove=B
				for (i,(s1,s2)) in enumerate(zip(states,states[k:])):
					diff=s2-s1
					eng.load(s1)
					colorIn=W if i&1 else B
					colorOut=colorIn if k&1 else -colorIn
					seq=eng.iterativelyDeepen(s2,diff,colorIn,colorOut)
					msg="\n>>> {0} ({1}, {2})\n>>> {3}\n".format(f,k,i,str(seq))+s1.exportDiff(s2)
					self.assertIsNotNone(seq,msg)
					self.assertLessEqual(len(seq),k,msg)
					if len(seq)!=k: _log.warning("shorter than expected transition sequence:" + msg + "\n" + str(seq))
					toMove*=-1