BEPUutilitiesTests.BoundingTests.TestBoxRayCorrectness C# (CSharp) Method

TestBoxRayCorrectness() private method

private TestBoxRayCorrectness ( ) : void
return void
        public static unsafe void TestBoxRayCorrectness()
        {
            //Test random rays.
            Random random = new Random(5);
            int intersectionCount = 0;
            for (int i = 0; i < 1000000; ++i)
            {
                Ray simdRay;
                BoundingBox simdBox;

                simdRay.Position = 20 * (new Vector3((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble()) - new Vector3(0.5f));
                var boxPosition = 5 * (new Vector3((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble()) - new Vector3(0.5f));
                var target = 5 * (new Vector3((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble()) - new Vector3(0.5f));
                simdRay.Direction = target - simdRay.Position;

                var width = new Vector3(3 * (float)random.NextDouble());
                simdBox.Min = boxPosition - width;
                simdBox.Max = boxPosition + width;

                TestIntersection(simdRay, simdBox, ref intersectionCount);

            }

            //Test corner cases.
            {
                Ray simdRay;
                BoundingBox simdBox;
                simdBox.Min = new Vector3(0);
                simdBox.Max = new Vector3(1);

                //Inside
                simdRay.Position = new Vector3(0.5f);
                simdRay.Direction = new Vector3(1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(0.5f);
                simdRay.Direction = new Vector3(-1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                //Perpendicular to surface
                simdRay.Position = new Vector3(0.5f, 0.5f, 0);
                simdRay.Direction = new Vector3(-1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(0.5f, 0.5f, 1);
                simdRay.Direction = new Vector3(1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                //Corner and edge
                simdRay.Position = new Vector3(0);
                simdRay.Direction = new Vector3(1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(-1, 0, 0);
                simdRay.Direction = new Vector3(1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(0, 0.5f, 0);
                simdRay.Direction = new Vector3(1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(0, 0.5f, 0.5f);
                simdRay.Direction = new Vector3(1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                //Reversed
                simdRay.Position = new Vector3(1);
                simdRay.Direction = new Vector3(-1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(2, 0, 0);
                simdRay.Direction = new Vector3(-1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(1, 0.5f, 0);
                simdRay.Direction = new Vector3(-1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

                simdRay.Position = new Vector3(1, 0.5f, 0.5f);
                simdRay.Direction = new Vector3(-1, 0, 0);
                TestIntersection(simdRay, simdBox, ref intersectionCount);

            }
            Console.WriteLine($"intersectionCount: {intersectionCount}");
        }