public void Init_Should()
        {
            var plane = new MinecraftSharp.Infrastructure.SimpleMath.Plane(Vector3.UnitX, PointF.Zero);

            Assert.AreEqual(Vector3.UnitX, plane.Normal);
            Assert.Zero(plane.D);


            var random = new Random();

            for (int i = 0; i < 1e6; i++)
            {
                var normal = new Vector3((float)random.NextDouble(), (float)random.NextDouble(),
                                         (float)random.NextDouble());
                normal = Vector3.Normalize(normal);
                plane  = new Plane(Vector3.Normalize(normal), normal.AsPointF());

                Assert.AreEqual(normal.Length(), Math.Abs(plane.D), 10e-5);
            }
        }
        public void ContainsPoint_Should()
        {
            var plane = new MinecraftSharp.Infrastructure.SimpleMath.Plane(Vector3.UnitY, new PointF(0, 1, 0));

            var random = new Random();

            for (int i = 0; i < 1e6; i++)
            {
                var point = new PointF((float)random.NextDouble() * 1000 - 500, 1,
                                       (float)random.NextDouble() * 1000 - 500);

                Assert.IsTrue(plane.ContainsPoint(point));
            }

            for (int i = 0; i < 1e6; i++)
            {
                var point = new PointF((float)random.NextDouble() * 1000 - 500, random.Next(2, 100),
                                       (float)random.NextDouble() * 1000 - 500);

                Assert.IsFalse(plane.ContainsPoint(point));
            }
        }