public void TestMovement()
        {
            Block TestBlock = new Block_Line(Color.Blue, 20, 10, 20, 4, 1);

            TestBlock.Rotate = false;
            TestBlock.Assign();

            Assert.AreEqual(20, TestBlock.X);
            Assert.AreEqual(10, TestBlock.Y);
            int x = 20 * (TestBlock.Size - 1);

            for (int i = 0; i < 2; i++)
            {
                TestBlock.MoveDown(x);
            }

            for (int i = 0; i < 4; i++)
            {
                TestBlock.MoveRight(x);
            }

            Assert.AreEqual(20 + 20 * 4, TestBlock.X);
            Assert.AreEqual(10 + 20 * 2, TestBlock.Y);

            for (int i = 0; i < 3; i++)
            {
                TestBlock.MoveLeft();
            }

            Assert.AreEqual(20 + 20 * 4 - 20 * 3, TestBlock.X);
            Assert.AreEqual(50, TestBlock.Y);

            for (int i = 0; i < 5; i++)
            {
                TestBlock.MoveUp();
            }

            Assert.AreEqual(20 + 20 * 4 - 20 * 3, TestBlock.X);
            Assert.AreEqual(10, TestBlock.Y);

            //Tesing After Rotaion
            TestBlock.Rotate = true;
            TestBlock.Assign();

            for (int i = 0; i < 30; i++)
            {
                TestBlock.MoveDown(x);
            }

            Assert.AreEqual(20 + 20 * 4 - 20 * 3, TestBlock.X);
            Assert.AreEqual(390 - x, TestBlock.Y);

            for (int i = 0; i < 30; i++)
            {
                TestBlock.MoveRight(x);
            }

            Assert.AreEqual(400, TestBlock.X);
            Assert.AreEqual(390 - x, TestBlock.Y);
        }
        public void TestEdgesAndMovement()
        {
            Block TestBlock = new Block_Line(Color.Blue, 20, 10, 20, 4, 1);

            TestBlock.Rotate = false;
            TestBlock.Assign();
            TestBlock.AssignEdges();
            int x = 20 * (TestBlock.Size - 1);

            TestBlock.MoveRight(x);
            TestBlock.MoveRight(x);
            TestBlock.MoveRight(x);
            TestBlock.AssignEdges();

            foreach (Point2D lte in TestBlock.TopLeftEdges)
            {
                Assert.AreEqual(20 + 20 * 3, lte.X);
                Assert.AreEqual(10, lte.Y);
            }

            TestBlock.MoveDown(x);
            TestBlock.MoveDown(x);
            TestBlock.AssignEdges();

            foreach (Point2D rbe in TestBlock.BottomRightEdges)
            {
                Assert.AreEqual(20 + 20 * TestBlock.Size + 20 * 3, rbe.X);
                Assert.AreEqual(10 + TestBlock.Length + 20 * 2, rbe.Y);
            }
        }
        public void TestBottomEdgeAssign()
        {
            Block TestBlock = new Block_Line(Color.Blue, 20, 10, 20, 4, 1);

            TestBlock.Rotate = false;
            TestBlock.Assign();
            TestBlock.AssignEdges();
            foreach (Point2D rbe in TestBlock.BottomRightEdges)
            {
                Assert.AreEqual(20 + 20 * TestBlock.Size, rbe.X);
                Assert.AreEqual(10 + TestBlock.Length, rbe.Y);
            }
            foreach (Point2D lbe in TestBlock.BottomLeftEdges)
            {
                Assert.AreEqual(20, lbe.X);
                Assert.AreEqual(10 + TestBlock.Length, lbe.Y);
            }

            //test after Rotation
            TestBlock.Rotate = true;
            TestBlock.AssignEdges();
            foreach (Point2D rbe in TestBlock.BottomRightEdges)
            {
                Assert.AreEqual(20 + TestBlock.Length, rbe.X);
                Assert.AreEqual(10 + 20 * TestBlock.Size, rbe.Y);
            }
            foreach (Point2D lbe in TestBlock.BottomLeftEdges)
            {
                Assert.AreEqual(20, lbe.X);
                Assert.AreEqual(10 + 20 * TestBlock.Size, lbe.Y);
            }
        }
        public void TestAssign()
        {
            Block TestBlock = new Block_Line(Color.Blue, 20, 10, 20, 4, 1);

            TestBlock.Rotate = false;
            TestBlock.Assign();
            for (int i = 0; i < TestBlock.Squares.Count; i++)
            {
                Assert.AreEqual(20 + i * TestBlock.Length, TestBlock.Squares[i].X);
                Assert.AreEqual(10, TestBlock.Squares[i].Y);
            }

            TestBlock.Rotate = true;
            TestBlock.Assign();
            for (int i = 0; i < TestBlock.Squares.Count; i++)
            {
                Assert.AreEqual(10 + i * TestBlock.Length, TestBlock.Squares[i].Y);
                Assert.AreEqual(20, TestBlock.Squares[i].X);
            }
        }
        public void TestMoveLeft()
        {
            Block TestBlock = new Block_Line(Color.Blue, 20, 10, 20, 4, 1);

            TestBlock.Rotate = false;
            TestBlock.Assign();

            Assert.AreEqual(20, TestBlock.X);
            int x = 20 * (TestBlock.Size - 1);

            TestBlock.MoveLeft();
            TestBlock.MoveLeft();

            Assert.AreEqual(20, TestBlock.X);

            for (int i = 0; i < 30; i++)
            {
                TestBlock.MoveLeft();
            }

            Assert.AreEqual(20, TestBlock.X);

            //Testing After Block is Rotated
            TestBlock.Rotate = true;
            TestBlock.Assign();

            Assert.AreEqual(20, TestBlock.X);

            TestBlock.MoveLeft();
            TestBlock.MoveLeft();

            Assert.AreEqual(20, TestBlock.X);

            for (int i = 0; i < 30; i++)
            {
                TestBlock.MoveLeft();
            }

            Assert.AreEqual(20, TestBlock.X);
        }