public override void TestAI(SearchContext <object, TicTacToeState, TicTacToeMove, object, TicTacToeMove> context)
        {
            // Test if the technique can find the winning move.
            var source = new TicTacToeState("X-O-XO---");

            context.Reset();
            context.Source = source.Copy();
            var result = PlayGame(context);

            Assert.IsTrue(result.PlayerWon == 0);

            // Test if the technique can avoid a loss.
            source = new TicTacToeState("--X-OX---");
            source.EndTurn();
            context.Reset();
            context.Source = source.Copy();
            result         = PlayGame(context);
            Assert.IsTrue(result.PlayerWon == -1);

            // On an empty board the game should be a draw.
            // (first player should play corner/middle position and second player should force the draw by playing the other)
            source = new TicTacToeState();
            context.Reset();
            context.Source = source.Copy();
            result         = PlayGame(context);
            Assert.IsTrue(result.PlayerWon == -1);

            // If the first player plays the middle position, the game is a draw.
            // (second player should play a corner position)
            source = new TicTacToeState("----X----");
            source.EndTurn();
            context.Reset();
            context.Source = source.Copy();
            result         = PlayGame(context);
            Assert.IsTrue(result.PlayerWon == -1);

            // If the first player plays an edge position, the game is a draw.
            // (second player should play the middle position)
            source = new TicTacToeState("---X-----");
            source.EndTurn();
            context.Reset();
            context.Source = source.Copy();
            result         = PlayGame(context);
            Assert.IsTrue(result.PlayerWon == -1);
        }