public void FiveStepsAwayFromMaxWinning_IterativeSearch_ReuseCache_MaxWin(int degreeOfParallelism, ParallelismMode parallelismMode) { var startState = Connect4TestUtils.GetMaxFiveMovesAwayFromWinningState(); var engine = Connect4TestUtils.GetSearchEngine(degreeOfParallelism, parallelismMode, 1, CacheMode.ReuseCache); var evaluation = new IterativeSearchWrapper(engine).IterativeSearch(startState, 1, 8, CancellationToken.None); Assert.AreEqual(BoardEvaluator.MaxEvaluation, evaluation.Evaluation); }
public void FiveStepsAwayFromMaxWinning_MaxTurn_MaxWin(int degreeOfParallelism, ParallelismMode parallelismMode, CacheMode cacheMode) { var startState = Connect4TestUtils.GetMaxFiveMovesAwayFromWinningState(); var engine = Connect4TestUtils.GetSearchEngine(degreeOfParallelism, parallelismMode, 1, CacheMode.ReuseCache); var evaluation = engine.Search(startState, 5); Assert.AreEqual(BoardEvaluator.MaxEvaluation, evaluation.Evaluation); Assert.IsTrue(BoardEvaluator.IsWin(((Connect4State)evaluation.StateSequence.Last()).Board, Player.Max), "Should have found a wining state"); Assert.IsTrue(evaluation.AllChildrenAreDeadEnds, "All children should be dead ends"); }
public void FiveStepsAwayFromMaxWinning_ReuseCache_DontDieEarly_MaxWin(int degreeOfParallelism, ParallelismMode parallelismMode) { var startState = Connect4TestUtils.GetMaxFiveMovesAwayFromWinningState(); var engine = Connect4TestUtils.GetSearchEngine(degreeOfParallelism, parallelismMode, 1, CacheMode.ReuseCache); engine.DieEarly = false; engine.Search(startState, 5); Assert.IsTrue(((StateCacheManager)engine.CacheManager).Count > 0, "The cache doesn't contain any states"); var evaluation = engine.Search(startState, 5); Assert.AreEqual(BoardEvaluator.MaxEvaluation, evaluation.Evaluation); }
public void FiveStepsAwayFromMaxWinning_FillCache_MaxWin(int degreeOfParallelism, ParallelismMode parallelismMode) { var startState = Connect4TestUtils.GetMaxFiveMovesAwayFromWinningState(); var engine = Connect4TestUtils.GetSearchEngine(degreeOfParallelism, parallelismMode, 1, CacheMode.ReuseCache); engine.DieEarly = true; engine.FillCache(startState, CancellationToken.None); Assert.IsTrue(((StateCacheManager)engine.CacheManager).Count > 0, "The cache doesn't contain any states"); Assert.IsNotNull(engine.CacheManager.GetStateEvaluation(startState, 0, null), "The cache doesn't contain the start state"); var evaluation = engine.Search(startState, 5); Assert.AreEqual(BoardEvaluator.MaxEvaluation, evaluation.Evaluation); }