Files @ dc1ed8ff56ef
Branch filter:

Location: OneEye/src/tests/testEngine.py - annotation

Laman
cleaned up and documented shutdown
f9ab2070bd69
f9ab2070bd69
077600f0c5f8
077600f0c5f8
f9ab2070bd69
f9ab2070bd69
077600f0c5f8
077600f0c5f8
b06733513452
077600f0c5f8
077600f0c5f8
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
077600f0c5f8
077600f0c5f8
077600f0c5f8
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
077600f0c5f8
077600f0c5f8
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
077600f0c5f8
077600f0c5f8
077600f0c5f8
5b4c6f5a0a28
5b4c6f5a0a28
5b4c6f5a0a28
0cb3fbe06b5d
0cb3fbe06b5d
0cb3fbe06b5d
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
0cb3fbe06b5d
0cb3fbe06b5d
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
0cb3fbe06b5d
0cb3fbe06b5d
f9ab2070bd69
0cb3fbe06b5d
5b4c6f5a0a28
5b4c6f5a0a28
5b4c6f5a0a28
0cb3fbe06b5d
0cb3fbe06b5d
0cb3fbe06b5d
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
0cb3fbe06b5d
0cb3fbe06b5d
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
0cb3fbe06b5d
0cb3fbe06b5d
0cb3fbe06b5d
5b4c6f5a0a28
5b4c6f5a0a28
5b4c6f5a0a28
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
5b4c6f5a0a28
5b4c6f5a0a28
5b4c6f5a0a28
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
5b4c6f5a0a28
5b4c6f5a0a28
5b4c6f5a0a28
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
b06733513452
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
7ef3360afbe5
f9ab2070bd69
5b4c6f5a0a28
7ef3360afbe5
5b4c6f5a0a28
5b4c6f5a0a28
5b4c6f5a0a28
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
f9ab2070bd69
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