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); }
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 }
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); }