public override void NotifyTurnToMove() { search.searchDiagnostics.isBook = false; moveFound = false; var bookMove = Move.InvalidMove; if (settings.useBook && board.plyCount <= settings.maxBookPly) { if (book.HasPosition(board.ZobristKey)) { bookMove = book.GetRandomBookMoveWeighted(board.ZobristKey); } } if (bookMove.IsInvalid) { if (settings.useThreading) { StartThreadedSearch(); } else { StartSearch(); } } else { search.searchDiagnostics.isBook = true; search.searchDiagnostics.moveVal = PGNCreator.NotationFromMove(FenUtility.CurrentFen(board), bookMove); settings.diagnostics = search.searchDiagnostics; Task.Delay(bookMoveDelayMillis).ContinueWith(t => PlayBookMove(bookMove)); } }
void ComparePerftDivideResults(string fen) { string[] expected = expectedResults.text.Split('\n'); Dictionary <string, int> expectedPerftDResults = new Dictionary <string, int> (); foreach (string line in expected) { if (string.IsNullOrEmpty(line)) { continue; } string moveName = line.Split(':') [0]; string nodeCount = line.Split(':') [1].Trim(); expectedPerftDResults.Add(moveName, int.Parse(nodeCount)); } foreach (string move in expectedPerftDResults.Keys) { if (perftDivideResults.ContainsKey(move)) { int expectedValue = expectedPerftDResults[move]; int actualValue = perftDivideResults[move]; if (expectedValue != actualValue) { board.LoadPosition(fen); var movesFromPos = moveGenerator.GenerateMoves(board); for (int i = 0; i < movesFromPos.Count; i++) { Move m = movesFromPos[i]; if (PerftUtility.MoveName(m) == move) { board.MakeMove(m); break; } } Debug.Log(string.Format("{0}: Expected {1} but had {2}", move, expectedValue, actualValue)); Debug.Log("Fen after this move: " + FenUtility.CurrentFen(board)); } } else { Debug.Log("Expected move: " + move + ", but was not found."); } } }