Files @ dc1ed8ff56ef
Branch filter:

Location: OneEye/src/tests/testEngine.py

Laman
cleaned up and documented shutdown
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