Exemple #1
0
        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));
            }
        }
Exemple #2
0
 public void TestCyclicInvariance()
 {
     foreach (var(fen, _) in BuildTestScenarios())
     {
         Assert.Equal(fen, FenUtility.PiecesToFen(FenUtility.FenToPieces(fen)));
     }
 }
Exemple #3
0
 public void TestPiecesToFen()
 {
     foreach (var(fen, pieces) in BuildTestScenarios())
     {
         Assert.Equal(fen, FenUtility.PiecesToFen(pieces));
     }
 }
Exemple #4
0
 public void TestFenToPieces()
 {
     foreach (var(fen, pieces) in BuildTestScenarios())
     {
         Assert.Equal(pieces, FenUtility.FenToPieces(fen));
     }
 }
Exemple #5
0
        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.");
                }
            }
        }
Exemple #6
0
 public void TestFenException()
 {
     Assert.Throws <FormatException>(() => FenUtility.FenToPieces("This is not a fen position."));
 }