public static void checkWinB()
        {
            Morabaraba morabaraba = new Morabaraba(4, 6);

            morabaraba.Move(0);
            morabaraba.NextTurn();
            morabaraba.Move(1);
            morabaraba.NextTurn();
            morabaraba.Move(3);
            morabaraba.NextTurn();
            morabaraba.Move(4);
            //p2 now
            morabaraba.Move(2);
            morabaraba.NextTurn();
            morabaraba.Move(5);
            morabaraba.NextTurn();
            morabaraba.Move(6);
            morabaraba.NextTurn();
            morabaraba.Move(7);
            morabaraba.NextTurn();
            morabaraba.Move(9);
            morabaraba.NextTurn();
            morabaraba.Move(10);
            //p2 final move
            morabaraba.Move(1);

            Assert.That(morabaraba.GetPlayerLostOrNot());
        }
        public static void P1Dark()
        {
            Morabaraba currentGameSession = new Morabaraba();
            bool       check = currentGameSession.Turn(true).GetCow().Get() == MorabarabaNS.Models.ColorType.Colour.Dark;

            Assert.That(check);
        }
        public static void BoardEmpty()
        {
            Morabaraba currentGameSession = new Morabaraba();
            bool       check = currentGameSession.GetBoard().Contains(new Cow(MorabarabaNS.Models.ColorType.Colour.Dark)) || currentGameSession.GetBoard().Contains(new Cow(MorabarabaNS.Models.ColorType.Colour.Light));

            Assert.That(!check);
        }
        public static void NoMoveOnPlace()
        {
            var        command  = Substitute.For <ICommand>();
            Morabaraba tester   = new Morabaraba(command);
            var        repeater = tester.Move(1);

            command.Received(1).Execute();
        }
        public static void CheckMillDiffColour(int val1, int val2, int val3) //Testing for every case
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(val1);
            morabaraba.Move(val2);
            morabaraba.Move(val3);
            Assert.That(!morabaraba.isKilling());
        }
        public static void CheckCantMovetoNotAdjacent(int val1, int val2)  //tests for all cases
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(val1);
            morabaraba.NextTurn();
            morabaraba.SetTurnPhase(Models.Phases.Phase.Moving);
            morabaraba.Move(val1);
            Helpers.IValidPositionVerifier verifier = new Helpers.ValidPositionVerifier(morabaraba.CurrentBoard);
            Assert.That(!verifier.VerifyMoving2(val2));
        }
        public static void PassOnEmptyPlace()
        {
            Morabaraba tester = new Morabaraba();

            tester.Move(0);
            tester.Move(1);
            bool turn = tester.getTurn();

            tester.Move(2);
            Assert.That(turn != tester.getTurn());
        }
        public static void FailOnOpponentPlace()
        {
            Morabaraba tester = new Morabaraba();

            tester.Move(0);
            tester.Move(1);
            bool turn = tester.getTurn();

            tester.Move(1);
            Assert.That(turn == tester.getTurn());
        }
        public static void CheckMillNotLine(int val1, int val2, int val3) //Tests for all cases
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(val1);
            morabaraba.NextTurn();
            morabaraba.Move(val2);
            morabaraba.NextTurn();
            morabaraba.Move(val3);
            Assert.That(!morabaraba.isKilling());
        }
        public static void MoveIncreasedDecreasedCowsOnBoard()
        {
            Morabaraba morabaraba = new Morabaraba(5);

            morabaraba.Move(0);
            morabaraba.NextTurn();
            morabaraba.SetTurnPhase(Models.Phases.Phase.Moving);
            morabaraba.Move(0);
            morabaraba.Move(1);
            Assert.That(morabaraba.CurrentBoard.CowsOnBoard() == 1);
        }
        public static void CheckMovetoEmpty(int val1, int val2)
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(val1);
            morabaraba.Move(val2);
            morabaraba.NextTurn();
            morabaraba.SetTurnPhase(Models.Phases.Phase.Moving);
            morabaraba.Move(val2);
            Helpers.IValidPositionVerifier verifier = new Helpers.ValidPositionVerifier(morabaraba.CurrentBoard);
            Assert.That(!verifier.VerifyMoving2(val1));
        }
        public static void CheckMillSameColour(int val1, int val2, int val3) //testing for every case
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(val1);
            morabaraba.NextTurn();
            morabaraba.Move(val2);
            morabaraba.NextTurn();
            morabaraba.Move(val3);
            morabaraba.NextTurn();
            Assert.That(morabaraba.isKilling());
        }
        public static void CantshootEmpty()
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(0);
            morabaraba.NextTurn();
            morabaraba.Move(1);
            morabaraba.NextTurn();
            morabaraba.Move(2);
            morabaraba.Move(23);
            Assert.That(morabaraba.isKilling());
        }
        public static void MaxofTwelveCows()
        {
            Morabaraba tester = new Morabaraba();

            for (int i = 0; i < 24; i++)
            {
                tester.Move(i);
            }
            var p1 = tester.Turn(true);
            var p2 = tester.Turn(false);

            Assert.That(p1.GetUnplaced() == 0 && p2.GetUnplaced() == 0);
        }
        public static void ShotCowRemoved()
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(23);
            morabaraba.Move(0);
            morabaraba.NextTurn();
            morabaraba.Move(1);
            morabaraba.NextTurn();
            morabaraba.Move(2);
            morabaraba.Move(23);
            Assert.That(morabaraba.GetBoard()[23].Get() == MorabarabaNS.Models.ColorType.Colour.Empty);
        }
        public static void checkWinA()
        {
            Morabaraba morabaraba = new Morabaraba(3);

            morabaraba.Move(0);  //p1 placed 1 unplaced 2
            morabaraba.Move(23); //p2 placed 1 unplaced 2
            morabaraba.Move(1);  //p1 placed 2 unplaced 1
            morabaraba.Move(22); //p2 placed 2 unplaced 1
            morabaraba.Move(2);  //p1 placed 3 unplaced 0
            morabaraba.Move(22); //p2 placed 1 unplaced 1
            morabaraba.Move(16); //p2 placed 2 unplaced 0
            Assert.That(morabaraba.GetPlayerLostOrNot());
        }
        public static void OnlyShootOnce()
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(23);
            morabaraba.Move(0);
            morabaraba.NextTurn();
            morabaraba.Move(1);
            morabaraba.NextTurn();
            morabaraba.Move(2);
            morabaraba.Move(23);
            Assert.That(!morabaraba.isKilling());
        }
        public static void CheckShootCowInMillA(int val1, int val2, int val3, int randoval)  //tests for all cases
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(randoval);
            morabaraba.Move(val1);
            morabaraba.NextTurn();
            morabaraba.Move(val2);
            morabaraba.NextTurn();
            morabaraba.Move(val3);
            morabaraba.NextTurn();
            Helpers.IValidPositionVerifier verifier = new Helpers.ValidPositionVerifier(morabaraba.CurrentBoard);

            Assert.That(verifier.VerifyCanShoot(randoval, morabaraba.Turn()));
        }
        public static void CheckShootCowInMillB(int val1, int val2, int val3)  //tests for all cases
        //this checks that a cow can be shoot when there are only mills on the board
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(val1); //p1
            morabaraba.NextTurn();
            morabaraba.Move(val2); //p1
            morabaraba.NextTurn();
            morabaraba.Move(val3); //p1
            morabaraba.Changeremoving();
            Helpers.IValidPositionVerifier verifier = new Helpers.ValidPositionVerifier(morabaraba.CurrentBoard);

            Assert.That(verifier.VerifyCanShoot(val1, morabaraba.Turn()));
        }
        public static void CheckBoardAfterMove(int startval, int endval)  //tests thoroughly that the move happens as it should AND that the number of cows stays the same after a shift
        {
            Morabaraba morabaraba = new Morabaraba();

            morabaraba.Move(startval);
            morabaraba.NextTurn();
            var cowcount = morabaraba.CurrentBoard.CowsOnBoard();

            morabaraba.SetTurnPhase(Models.Phases.Phase.Moving);
            var temp = morabaraba.GetBoard()[startval].Get();

            morabaraba.Move(startval);
            morabaraba.Move(endval);
            Assert.That(morabaraba.GetBoard()[endval].Get() == temp && morabaraba.GetBoard()[startval].Get() == Models.ColorType.Colour.Empty && morabaraba.CurrentBoard.CowsOnBoard() == cowcount);
        }