public void BenchmarkConnect4()
        {
            var searchDepth = 11;
            var board       = Connect4TestUtils.GetEmptyBoard();

            Benchmark(board, searchDepth, ParallelismMode.NonParallelism);
            Benchmark(board, searchDepth, ParallelismMode.FirstLevelOnly);
            Benchmark(board, searchDepth, ParallelismMode.ParallelismByLevel, levelOfParallelism: 2);
            Benchmark(board, searchDepth, ParallelismMode.TotalParallelism, 4);
        }
Пример #2
0
        public void NewGame_CheckCancellationToken(int degreeOfParallelism, ParallelismMode parallelismMode)
        {
            var startState = new Connect4State(Connect4TestUtils.GetEmptyBoard(), Player.Max);

            var engine             = Connect4TestUtils.GetSearchEngine(degreeOfParallelism, parallelismMode);
            var cancellationSource = new CancellationTokenSource();
            var searchTask         = engine.SearchAsync(startState, 20, cancellationSource.Token);

            Thread.Sleep(500);
            cancellationSource.Cancel();
            Thread.Sleep(500);

            Assert.IsTrue(searchTask.IsCompleted, "Search should have complated by now");
            var t = searchTask.Result; // Check that we can get a result even if the search was terminated
        }
Пример #3
0
        public void NewGame_NoOneCanWin(int degreeOfParallelism, ParallelismMode parallelismMode)
        {
            var startState = new Connect4State(Connect4TestUtils.GetEmptyBoard(), Player.Max);

            var engine     = Connect4TestUtils.GetSearchEngine(degreeOfParallelism, parallelismMode);
            var evaluation = engine.Search(startState, 7);

            Assert.IsFalse(BoardEvaluator.IsWin(((Connect4State)evaluation.StateSequence.Last()).Board, Player.Max));
            Assert.IsFalse(evaluation.FullTreeSearchedOrPruned);
            Assert.IsFalse(evaluation.AllChildrenAreDeadEnds);

            if (degreeOfParallelism == 1)
            {
                //Check that the our optimizations are working
                Assert.IsTrue(evaluation.Leaves < 26000, "Too many leaves in search. Leaves = " + evaluation.Leaves);
                Assert.IsTrue(evaluation.InternalNodes < 10000,
                              "Too many intarnal nodes in search. Nodes = " + evaluation.InternalNodes);
            }
            // Too few leaves or internal nodes means that something went wrong
            Assert.IsTrue(evaluation.Leaves > 1000, "Too few leaves in search. Leaves = " + evaluation.Leaves);
            Assert.IsTrue(evaluation.InternalNodes > 1000, "Too few intarnal nodes in search. Nodes = " + evaluation.InternalNodes);
        }