コード例 #1
0
        public void CheckSecondSituationHorizontallyTest()
        {
            Board     board     = new Board();
            AlphaBeta alphaBeta = new AlphaBeta();
            int       result    = 0;

            //OOO_
            board.PutToken(0);
            board.PutToken(1);
            board.PutToken(2);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);

            result = 0;
            //_OO_O
            board.RemoveToken(0);
            board.PutToken(4);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);

            result = 0;
            //_OOOX
            board.RemoveToken(4);
            board.PutToken(4);
            board.PutToken(3);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);

            result = 0;
            //_OOO_
            board.RemoveToken(4);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(int.MaxValue, result);

            result = 0;
            //_OOO___
            //_XOXOXO
            board = new Board();
            board.PutToken(2);
            board.PutToken(4);
            board.PutToken(6);
            board.PutToken(1);
            board.PutToken(3);
            board.PutToken(5);
            board.PutToken(1);
            board.PutToken(2);
            board.PutToken(3);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);

            result = 0;
            //_OOO___
            //XXOXOXO
            board.PutToken(0);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(int.MaxValue, result);


            result = 0;
            //XOOO___
            //XXOXOXO
            board.PutToken(0);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);

            result = 0;
            //_XO_OO_
            //_OOOXXX
            board = new Board();
            board.PutToken(1);
            board.PutToken(2);
            board.PutToken(3);
            board.PutToken(4);
            board.PutToken(5);
            board.PutToken(6);
            board.PutToken(1);
            board.PutToken(2);
            board.PutToken(4);
            board.PutToken(5);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);

            result = 0;
            //OOO____
            //XXX_OOO
            board = new Board();
            board.PutToken(0);
            board.PutToken(1);
            board.PutToken(2);
            board.PutToken(0);
            board.PutToken(1);
            board.PutToken(2);
            board.PutToken(4);
            board.PutToken(5);
            board.PutToken(6);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);

            //GENERALLY UPPER EXAMPLE SHOULD RETURN INFINITY, BUT WE DONT CHECK IT...
            //ITS LIKE TWO VERY GOOD SITUATIONS. WE CHECK JUST ONE.
            //IMAGINE OTHER SITUATION:
            //_OOOXOX
            //_OOOXOX
            //THIS EXAMPLE ALSO SHOWS TWO VERY GOOD SITUATIONS BUT IT SHOULD NOT RETURN INF
            //SHOULD WE CHECK THIS SPECIAL ONE? ITS ADDITIONAL IFS... TOO MANY...

            //OOOX___
            result = 0;
            board  = new Board();
            board.PutToken(0);
            board.PutToken(1);
            board.PutToken(2);
            board.PutToken(3);
            var res = alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);

            Assert.IsFalse(res);
            Assert.AreEqual(50000, result);

            //_OOX___
            result = 0;
            board.RemoveToken(0);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.IsFalse(res);
            Assert.AreEqual(0, result);

            //___OOO_
            result = 0;
            board  = new Board();
            board.PutToken(3);
            board.PutToken(4);
            board.PutToken(5);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(int.MaxValue, result);

            board.PutToken(2);
            alphaBeta.CheckSecondSituationHorizonatally(true, board, ref result);
            Assert.AreEqual(900000, result);
        }