Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
        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");
        }
Esempio n. 6
0
        public void Compete_MinAndMaxDontHaveAnAlternateEvaluation_ThrowException()
        {
            var engine = TicTacToeBassicTests.GetSearchEngine(1, ParallelismMode.FirstLevelOnly);

            engine.Compete(Utils.GetEmptyTicTacToeState(), 2);
        }