import os.path
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
import go.engine
from statebag import BoardState,StateBag,updateDiff
from .util import simpleLoadSgf,listStates
class TestBoardState(TestCase):
def testBasic(self):
s1=BoardState([
[_,_,_],
[_,_,_],
[_,_,_]
])
s2=BoardState([
[_,_,_],
[_,B,_],
[_,_,_]
])
g=SpecGo(3)
go.engine.eng=Engine(g)
s2.tryConnect(s1)
self.assertIs(s2.getPrev(), s1)
self.assertEqual(s2.getWeight(), 1)
def test2ply(self):
s1=BoardState([
[_,_,_],
[_,_,_],
[_,_,_]
])
s2=BoardState([
[_,_,_],
[_,B,_],
[_,_,_]
])
s3=BoardState([
[_,W,_],
[_,B,B],
[_,_,_]
])
g=SpecGo(3)
go.engine.eng=Engine(g)
s2.tryConnect(s1)
s3.tryConnect(s2)
self.assertIs(s3.getPrev(), s2)
self.assertEqual(s3.getWeight(), 1)
def testUpdateDiff(self):
files=["O-Takao-20110106.sgf","Sakai-Iyama-20110110.sgf"]
for f in files:
moves=simpleLoadSgf(os.path.join(cfg.srcDir,"tests/data",f))
states=listStates(moves)
for (i,j,k) in [(1,2,3),(10,20,30),(90,100,110),(20,70,120)]:
s1=states[i]
s2=states[j]
s3=states[k]
diff1=s2-s1
diff2=s3-s2
with self.subTest(file=f,ijk=(i,j,k)):
self.assertEqual(s3-s1,updateDiff(diff1,diff2))
class TestStateBag(TestCase):
def testReal(self):
go.engine.eng=Engine()
files=["O-Takao-20110106.sgf","Sakai-Iyama-20110110.sgf"]
for f in files:
moves=simpleLoadSgf(os.path.join(cfg.srcDir,"tests/data",f))
states=listStates(moves)
for k in range(1,3):
bag=StateBag()
i=0
for s_ in states:
i+=1
if i%(2*k-1)>=k: # keep k, skip k-1
continue
s=bag.pushState(s_)
if len(bag._states)>1:
self.assertIs(s.getPrev(), bag._states[-2])