Esempio n. 1
0
        public void AdjudicatorOnDataReceivedTest()
        {
            var injector       = new Mock <ISimpleInjectorWrapper>();
            var processFactory = new Mock <IProcessManagerFactory>();
            var fakeProcess    = new FakeProcessManager(new Mock <IProcessManager>().Object);

            processFactory.Setup(s => s.Create(It.IsAny <string>(), It.IsAny <string>())).Returns(() => fakeProcess);
            injector.Setup(s => s.GetInstance <IProcessManagerFactory>()).Returns(() => processFactory.Object);
            var confService = new Mock <IConfigurationService>();

            injector.Setup(s => s.GetInstance <IConfigurationService>()).Returns(() => confService.Object);
            var fileService = new Mock <IFileService>();

            fileService.Setup(s => s.FileExists(It.IsAny <string>())).Returns(() => true);
            injector.Setup(s => s.GetInstance <IFileService>()).Returns(() => fileService.Object);
            var        adjudicator = new Adjudicator(injector.Object, new Duel());
            GameResult gameResult  = null;

            adjudicator.Resigned = result => gameResult = result;

            adjudicator.BlackMoves(Move.Parse("Z99"));
            Task.Run(
                () =>
            {
                Thread.Sleep(1000);
                fakeProcess.DataReceived("= W+9.0");
            });
            fakeProcess.DataReceived("? illegal move");
            Assert.NotNull(gameResult);
            Assert.Equal(EndGameReason.InvalidMove, gameResult.EndReason);
            Assert.Equal(9, gameResult.FinalScore);
            injector.VerifyAll();
            processFactory.VerifyAll();
            fileService.VerifyAll();
        }
Esempio n. 2
0
        public void OnMoveMade(Player sender, List <Movement> moves)
        {
            // Q_ASSERT(m_gameInProgress);
            // Q_ASSERT(m_board->isLegalMove(move));
            if (sender != PlayerToMove)
            {
                //qDebug("%s tried to make a move on the opponent's turn", qPrintable(sender->name()));
                return;
            }

            Moves.AddRange(moves);
            addPGNMove(moves, evalString(sender.Evaluation));

            // Get the result before sending the move to the opponent
            foreach (Movement move in moves)
            {
                Game.MakeMove(move, true);
            }
            if (Result.IsNone)
            {
                Adjudicator.AddEval(Game, sender.Evaluation);
                if (Adjudicator.Result != null)
                {
                    Result = Adjudicator.Result;
                }
            }
            else
            {
                int q = 0;
            }
            for (int x = 0; x < moves.Count; x++)
            {
                Game.UndoMove();
            }

            Player player = PlayerToWait;

            player.MakeMove(moves);
            foreach (Movement move in moves)
            {
                Game.MakeMove(move, true);
            }

            if (Result.IsNone)
            {
                startTurn();
            }
            else
            {
                Stop();
            }

            emitLastMove();
        }
Esempio n. 3
0
        public void BotRunnerCtorTest()
        {
            var injector    = new Mock <ISimpleInjectorWrapper>();
            var confService = new Mock <IConfigurationService>();

            injector.Setup(s => s.GetInstance <IConfigurationService>()).Returns(() => confService.Object);
            var fileService = new Mock <IFileService>();

            fileService.Setup(s => s.FileExists(It.IsAny <string>())).Returns(() => true);
            injector.Setup(s => s.GetInstance <IFileService>()).Returns(() => fileService.Object);
            var processFactory = new Mock <IProcessManagerFactory>();

            processFactory.Setup(s => s.Create(It.IsAny <string>(), It.IsAny <string>())).Returns(() => new Mock <IProcessManager>().Object);
            injector.Setup(s => s.GetInstance <IProcessManagerFactory>()).Returns(() => processFactory.Object);
            var adjudicator = new Adjudicator(injector.Object, new Duel());
            var blackBot    = new Mock <IGoBot>();
            var whiteBot    = new Mock <IGoBot>();

            blackBot.Setup(s => s.Name).Returns(() => "Alice");
            whiteBot.Setup(s => s.Name).Returns(() => "Jack");
            bool?whiteStarted = null;
            bool?blackStarted = null;

            whiteBot.Setup(s => s.StartGame(It.IsAny <bool>())).Callback <bool>(c => whiteStarted = c);
            blackBot.Setup(s => s.StartGame(It.IsAny <bool>())).Callback <bool>(c => blackStarted = c);

            IBotRunner botRunner = new BotRunner(adjudicator, blackBot.Object, whiteBot.Object);

            Assert.Equal(false, whiteStarted);
            Assert.Equal(true, blackStarted);

            Assert.False(botRunner.IsFinished);
            GameResult gameResult = null;

            botRunner.EndGame = result => gameResult = result;
            Assert.Null(gameResult);
            adjudicator.Resigned(new GameResult {
                EndReason = EndGameReason.Resign
            });

            Assert.True(botRunner.IsFinished);
            Assert.NotNull(gameResult);
            Assert.Equal(EndGameReason.Resign, gameResult.EndReason);

            Assert.NotNull(botRunner);
            Assert.NotNull(botRunner.EndGame);
            blackBot.VerifyAll();
            whiteBot.VerifyAll();
        }
Esempio n. 4
0
        private static async Task DoTest(BenchmarkSettings settings)
        {
            Console.WriteLine("____________________________________");
            Console.WriteLine("Board size: {0}, bot #1 strength : {1}, bot #2 strength: {2}", settings.BoardSize, settings.FirstBotLevel, settings.SecondBotLevel);
            tcs = new TaskCompletionSource <bool>();
            Watch.Restart();

            var botWhite = botFactory.CreateBotInstance(botKind, "WhiteBot");

            botWhite.BoardSize = settings.BoardSize;
            botWhite.Level     = settings.FirstBotLevel;

            var botBlack = botFactory.CreateBotInstance(new BotKind {
                BinaryPath = botKind.BinaryPath, FullClassName = botKind.FullClassName
            }, "BlackBot");

            botBlack.BoardSize = settings.BoardSize;
            botBlack.Level     = settings.SecondBotLevel;

            var judge = new Adjudicator(
                Bootstrap(),
                new Duel
            {
                BoardSize = settings.BoardSize,
                BlackBot  = "BlackBot",
                WhiteBot  = "WhiteBot",
                Name      = "Benchmarking"
            })
            {
                SaveGameResults = true, GenerateLastBoard = true
            };
            var runner = new BotRunner(judge, botBlack, botWhite)
            {
                EndGame = OnTestFinised
            };
            await tcs.Task;

            runner.Cancel();
        }
Esempio n. 5
0
        public void AdjudicatorGenerateLastBoardTest()
        {
            var           injector           = new Mock <ISimpleInjectorWrapper>();
            var           processFactory     = new Mock <IProcessManagerFactory>();
            var           processManager     = new Mock <IProcessManager>();
            var           fakeProcess        = new FakeProcessManager(processManager.Object);
            List <string> processWrittenData = new List <string>();

            processManager.Setup(s => s.WriteData(It.IsAny <string>(), It.IsAny <object[]>()))
            .Callback <string, object[]>(
                (s, o) => processWrittenData.Add(s));
            processFactory.Setup(s => s.Create(It.IsAny <string>(), It.IsAny <string>())).Returns(() => fakeProcess);
            injector.Setup(s => s.GetInstance <IProcessManagerFactory>()).Returns(() => processFactory.Object);
            var confService = new Mock <IConfigurationService>();

            injector.Setup(s => s.GetInstance <IConfigurationService>()).Returns(() => confService.Object);
            var fileService = new Mock <IFileService>();

            fileService.Setup(s => s.FileExists(It.IsAny <string>())).Returns(() => true);
            injector.Setup(s => s.GetInstance <IFileService>()).Returns(() => fileService.Object);
            var adjudicator = new Adjudicator(injector.Object, new Duel()
            {
                BoardSize = 2, WhiteBot = "weiss", BlackBot = "schwarz"
            });
            GameResult gameResult = null;

            adjudicator.Resigned          = result => gameResult = result;
            adjudicator.GenerateLastBoard = true;
            adjudicator.BoardUpdated      = delegate { };

            adjudicator.BlackMoves(Move.Parse("a1"));
            fakeProcess.DataReceived("= ");
            fakeProcess.DataReceived("   A B");
            fakeProcess.DataReceived(" 2 O O 2     WHITE (O) has captured 2 stones");
            fakeProcess.DataReceived(" 1 . . 1     BLACK (X) has captured 0 stones");
            fakeProcess.DataReceived("   A B");
            adjudicator.WhiteMoves(Move.Parse("b1"));
            fakeProcess.DataReceived("= ");
            fakeProcess.DataReceived("   A B");
            fakeProcess.DataReceived(" 2 O O 2     WHITE (O) has captured 2 stones");
            fakeProcess.DataReceived(" 1 . . 1     BLACK (X) has captured 0 stones");
            fakeProcess.DataReceived("   A B");
            Task.Run(
                () =>
            {
                Thread.Sleep(2000);
                fakeProcess.DataReceived("   A B");
                fakeProcess.DataReceived("   A B");
                fakeProcess.DataReceived(" 2 O O 2     WHITE (O) has captured 2 stones");
                fakeProcess.DataReceived(" 1 . . 1     BLACK (X) has captured 0 stones");
                fakeProcess.DataReceived("   A B");
            });
            adjudicator.BlackMoves(Move.Parse("resign"));
            Assert.Equal(EndGameReason.Resign, gameResult.EndReason);
            Assert.True(gameResult.FinalBoard.StartsWith("   A B\n 2 O O 2     WHITE (O) has captured 2 stones\n 1 . . 1     BLACK (X) has captured 0 stones"));
            Assert.Equal(6, processWrittenData.Count);
            Assert.Equal("boardsize {0}", processWrittenData.ElementAt(0));
            Assert.Equal("black a1", processWrittenData.ElementAt(1));
            Assert.Equal("showboard", processWrittenData.ElementAt(2));
            Assert.Equal("white b1", processWrittenData.ElementAt(3));
            Assert.Equal("showboard", processWrittenData.ElementAt(4));
            Assert.Equal("showboard", processWrittenData.ElementAt(5));

            injector.VerifyAll();
            processFactory.VerifyAll();
            fileService.VerifyAll();
        }
Esempio n. 6
0
        public void AdjudicatorBlackWhiteMovesTest()
        {
            var injector    = new Mock <ISimpleInjectorWrapper>();
            var confService = new Mock <IConfigurationService>();

            injector.Setup(s => s.GetInstance <IConfigurationService>()).Returns(() => confService.Object);
            var fileService = new Mock <IFileService>();

            fileService.Setup(s => s.FileExists(It.IsAny <string>())).Returns(() => true);
            injector.Setup(s => s.GetInstance <IFileService>()).Returns(() => fileService.Object);
            var processFactory = new Mock <IProcessManagerFactory>();
            var fakeProcess    = new FakeProcessManager(new Mock <IProcessManager>().Object);

            processFactory.Setup(s => s.Create(It.IsAny <string>(), It.IsAny <string>())).Returns(() => fakeProcess);
            injector.Setup(s => s.GetInstance <IProcessManagerFactory>()).Returns(() => processFactory.Object);
            var logger = new Mock <ILogger>();
            var logs   = new List <string>();

            injector.Setup(s => s.GetInstance <ILogger>()).Returns(() => logger.Object);
            logger.Setup(s => s.WriteWarning(It.IsAny <string>(), It.IsAny <object[]>()))
            .Callback <string, object[]>(
                (s, o) =>
            {
                logs.Add(string.Format(s, o));
            });
            var adjudicator = new Adjudicator(injector.Object, new Duel());

            try
            {
                adjudicator.BlackMoves(null);
                Assert.True(false, "Should fail on previous statement");
            }
            catch (Exception ex)
            {
                Assert.IsType(typeof(ArgumentNullException), ex);
                Assert.Equal("Value cannot be null.\r\nParameter name: move", ex.Message);
            }

            Assert.True(!logs.Any());
            adjudicator.WhiteMoves(null);

            Assert.True(logs.Any());
            Assert.Equal("White bot makes move when it is not its turn", logs[0]);
            GameResult gameResult = null;

            adjudicator.Resigned = result => gameResult = result;
            adjudicator.BlackMoves(Move.Parse("resign"));
            Assert.Equal(EndGameReason.Resign, gameResult.EndReason);

            adjudicator = new Adjudicator(injector.Object, new Duel());

            adjudicator.BlackMoves(Move.Parse("a6"));
            fakeProcess.DataReceived("= ");
            adjudicator.BlackMoves(null);
            adjudicator.WhiteMoves(Move.Parse("f3"));
            adjudicator.WhiteMoves(Move.Parse("f3"));
            Assert.Equal("Previous move was not yet validated. Ignoring f3 from white ", logs.Last());
            fakeProcess.DataReceived("= ");
            adjudicator.BlackMoves(Move.Parse("pass"));
            fakeProcess.DataReceived("= ");
            gameResult           = null;
            adjudicator.Resigned = result => gameResult = result;
            Task.Run(
                () =>
            {
                Thread.Sleep(1000);
                fakeProcess.DataReceived("= B+8.0");
            });

            adjudicator.WhiteMoves(Move.Parse("pass"));
            Assert.NotNull(gameResult);
            Assert.Equal(EndGameReason.ConsecutivePass, gameResult.EndReason);
            Assert.Equal(8, gameResult.FinalScore);
        }
Esempio n. 7
0
        public void AdjudicatorSaveGameResultsTest()
        {
            var injector       = new Mock <ISimpleInjectorWrapper>();
            var processFactory = new Mock <IProcessManagerFactory>();

            var  processManager = new Mock <IProcessManager>();
            bool disposed       = false;

            processManager.Setup(s => s.Dispose()).Callback(() => disposed = true);
            var           fakeProcess        = new FakeProcessManager(processManager.Object);
            List <string> processWrittenData = new List <string>();

            processManager.Setup(s => s.WriteData(It.IsAny <string>(), It.IsAny <object[]>()))
            .Callback <string, object[]>(
                (s, o) => processWrittenData.Add(s));
            processFactory.Setup(s => s.Create(It.IsAny <string>(), It.IsAny <string>())).Returns(() => fakeProcess);
            injector.Setup(s => s.GetInstance <IProcessManagerFactory>()).Returns(() => processFactory.Object);
            var confService = new Mock <IConfigurationService>();

            GameResult saveGameResult = null;
            string     savedFileName  = null;

            confService.Setup(s => s.SerializeGameResult(It.IsAny <GameResult>(), It.IsAny <string>()))
            .Callback <GameResult, string>(
                (r, f) =>
            {
                saveGameResult = r;
                savedFileName  = f;
            });
            injector.Setup(s => s.GetInstance <IConfigurationService>()).Returns(() => confService.Object);
            var fileService = new Mock <IFileService>();

            fileService.Setup(s => s.FileExists(It.IsAny <string>())).Returns(() => true);
            injector.Setup(s => s.GetInstance <IFileService>()).Returns(() => fileService.Object);
            var logger = new Mock <ILogger>();
            var logs   = new List <string>();

            injector.Setup(s => s.GetInstance <ILogger>()).Returns(() => logger.Object);
            logger.Setup(s => s.WriteWarning(It.IsAny <string>(), It.IsAny <object[]>()))
            .Callback <string, object[]>(
                (s, o) =>
            {
                logs.Add(string.Format(s, o));
            });
            var        adjudicator = new Adjudicator(injector.Object, new Duel());
            GameResult gameResult  = null;

            adjudicator.Resigned        = result => gameResult = result;
            adjudicator.SaveGameResults = true;

            adjudicator.BlackMoves(Move.Parse("&99"));
            Task.Run(
                () =>
            {
                Thread.Sleep(1000);
                fakeProcess.DataReceived("= W+aaa");
            });
            fakeProcess.DataReceived("? invalid coordinate");
            Assert.NotNull(gameResult);
            Assert.Equal(EndGameReason.InvalidMove, gameResult.EndReason);
            Assert.Equal(0, gameResult.FinalScore);
            Assert.Equal(saveGameResult, gameResult);
            Assert.True(logs.Count == 1);
            Assert.Equal("Could not parse final score: W+aaa", logs.First());
            Assert.Equal(4, processWrittenData.Count);
            Assert.Equal("boardsize {0}", processWrittenData.ElementAt(0));
            Assert.Equal("black &99", processWrittenData.ElementAt(1));
            Assert.Equal("final_score", processWrittenData.ElementAt(2));
            Assert.True(processWrittenData.ElementAt(3).StartsWith("printsgf 2"));

            Assert.False(disposed);
            adjudicator.Dispose();
            Assert.True(disposed);
            Assert.Equal("quit", processWrittenData.ElementAt(4));

            injector.VerifyAll();
            processFactory.VerifyAll();
            fileService.VerifyAll();
        }