public void Compete_GameEndsAtMaxDepth() { var engine = TicTacToeBassicTests.GetSearchEngine(1, ParallelismMode.FirstLevelOnly); var competitionResult = engine.Compete(Utils.GetEmptyTicTacToeState(), 2, 2, maxPlayDepth: 2); Assert.AreEqual(2, competitionResult.GameDepth); Assert.AreEqual(2, competitionResult.States.Count); }
public void Compete_TestAlternateEvaluationForMaxStrategie() { var engine = TicTacToeBassicTests.GetSearchEngine(1, ParallelismMode.FirstLevelOnly); var competitionResult = engine.Compete(Utils.GetEmptyTicTacToeState(), 9, (s, d, l) => 0); var finalState = (TicTacToeState)competitionResult.States.Last(); Assert.AreEqual(TicTacToeState.MinValue, finalState.Evaluate(0, new List <IState>()), "Min should have won"); }
public void Compete_EngineNineDepthsBeetsEngineOneDepth() { var engine = TicTacToeBassicTests.GetSearchEngine(1, ParallelismMode.FirstLevelOnly); var competitionResult = CompetitionManager.Compete(engine, engine, Utils.GetEmptyTicTacToeState(), 1, 9, 100); var finalState = (TicTacToeState)competitionResult.States.Last(); Assert.AreEqual(TicTacToeState.MinValue, finalState.Evaluate(0, new List <IState>()), "Min should have won"); Assert.AreEqual(finalState, competitionResult.FinalState, $"{nameof(competitionResult.FinalState)} is different than the last state in {nameof(competitionResult.States)}"); Assert.IsTrue(competitionResult.MaxTotalTime < competitionResult.MinTotalTime, "Min should have searched for longer then Max"); Assert.IsTrue(competitionResult.MaxLongestSearch < competitionResult.MinLongestSearch, "Min's longest should have searched for longer then Max's longest"); Assert.IsTrue(competitionResult.MaxLongestSearch < competitionResult.MaxTotalTime, "Total time should always be bigger than logest search time"); }
private void BenchmarkWithDegreeOfParallelism(int degreeOfParallelism, ParallelismMode parallelismMode) { Console.WriteLine("Running with degreeOfParallelism: " + degreeOfParallelism + ", Mode: " + parallelismMode); var engine = TicTacToeBassicTests.GetSearchEngine(degreeOfParallelism, parallelismMode); var startState = new TicTacToeState(new[, ] { { Player.Empty, Player.Empty, Player.Empty }, { Player.Empty, Player.Empty, Player.Empty }, { Player.Empty, Player.Empty, Player.Empty }, }, Player.Max); var results = engine.Search(startState, 10); Console.WriteLine("Time: " + results.SearchTime); Console.WriteLine("Leaves: " + results.Leaves); Console.WriteLine("InternalNodes: " + results.InternalNodes); }
private void RunThreadSaftyTest(int degreeOfParallelism, ParallelismMode parallelismMode, Action <SearchEngine> searchMethod) { var engine = TicTacToeBassicTests.GetSearchEngine(degreeOfParallelism, parallelismMode); var tasks = new Task[TEST_RUNS]; for (int i = 0; i < TEST_RUNS; i++) { tasks[i] = Task.Run(() => searchMethod(engine)); } var allTaskFinished = true; foreach (var task in tasks) { allTaskFinished = allTaskFinished && task.Wait(TimeSpan.FromSeconds(30)); } Assert.IsTrue(allTaskFinished, "Not all tasks finished"); }
public void Compete_MinAndMaxDontHaveAnAlternateEvaluation_ThrowException() { var engine = TicTacToeBassicTests.GetSearchEngine(1, ParallelismMode.FirstLevelOnly); engine.Compete(Utils.GetEmptyTicTacToeState(), 2); }